洛谷P4133 [BJOI2012]最多的方案(记忆化搜索)

题意

题目链接

求出把$n$分解为斐波那契数的方案数,方案两两不同的定义是分解出来的数不完全相同

Sol

这种题,直接爆搜啊。。。

打表后不难发现$<=1e18$的fib数只有88个

最先想到的应该是直接把$n$加入到搜索状态里,然后枚举能被分成哪些

但是这样分解出来的数可能会有重复的,因此我们还要把当前考虑到第几个数也加入到状态里。

不难得到以下代码

但是很显然会T飞。

优化一下,只考虑当前的fib数对答案的贡献,

也就是搜两种情况:

1、用该数分解

2、不用该数分解

代码是这样的

然而还是会T飞。

继续剪枝。

根据斐波那契的性质$\sum_{i = 1}^n f_i = f_{n+2} -1$

因此我们想要用前$ti - 1$个合成$x$,必须满足$x < f_{ti+1}$。

然后就A了qwq

// luogu-judger-enable-o2
#include<cstdio>
#include<iostream>
#include<map>
#define Pair pair<int, int>
#define MP(x, y) make_pair(x, y)
#define fi first
#define se second 
#define int long long
#define ull unsigned long long  
using namespace std;
const int MAXN = 1e5 + 10;
inline int read() {char c = getchar(); int x = 0, f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();return x * f;
}
int f[MAXN], tot, lim, dp[MAXN], N;
map<Pair, int> mp;
int dfs(int x, int ti) {if(mp.find(MP(x, ti)) != mp.end()) return mp[MP(x, ti)];if(x == 0) return 1;int ans = 0;/*for(int i = ti; i >= 1; i--) {if(x - f[i] >= 0) ans += dfs(x - f[i], i - 1);//else break;}*/if(x - f[ti] >= 0) ans += dfs(x - f[ti], ti - 1);if(x < f[ti + 1]) ans += dfs(x, ti - 1);return mp[MP(x, ti)] = ans;
}
main() {lim = 1e18;f[1] = 1; f[2] = 2;for(int i = 3; i; i++) {f[i] = f[i - 1] + f[i - 2];if(f[i] > lim) {tot = i; break;}}N = read();//dp[0] = 1;cout << dfs(N, tot - 1);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537850.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大话php设计模式视频,大话PHP设计模式

工厂模式用工厂方法或者类来实例化对象&#xff0c;而不是直接new。首先我们需要创建一个工厂类&#xff0c;比如Factory.php。如果不使用工厂模式的&#xff0c;我们需要一个对象的时候通常需要new Inexistence\girlfriend();然而我们一般不只在一个地方需要这个对象&#xff…

美团点评基于MGR的CMDB高可用架构搭建之路【转】

王志朋 美团点评DBA 曾在京东金融担任DBA&#xff0c;目前就职于美团点评&#xff0c;主要负责金融业务线数据库及基础组件数据库的运维。 MySQL Group Replication&#xff08;以下简称MGR&#xff09;&#xff0c;于5.7.17版本正式GA&#xff0c;由Oracle官方出品&#xff0c…

redmine更换主题

主题列表&#xff1a;http://www.redmine.org/projects/redmine/wiki/Theme_List 虽然有很多主题&#xff0c;但是很多主题都是要钱的&#xff0c;像这类&#xff08;上图&#xff09;没有下载地址的&#xff0c;都是要钱的。 含GitHub的下载地址的&#xff0c;是免费可下载的&…

redmine 邮箱配置(阿里云+windows)

说明 密码是第三方的授权码&#xff0c;不是邮箱密码 需要登录126网页版&#xff0c;在设置里开启 smtp 等第三方服务&#xff0c;设置授权码 阿里云Linux 默认屏蔽25号端口&#xff0c;所以需要开启ssl&#xff0c;和使用 465 端口 重启下 redmind sh /opt/redmine-3.4.6-…

linux查看当前用户终端,Linux----基本命令的使用(vi命令,查看文件内容,显示进程,切换用户等)...

1、vi是linux系统上经常使用的一个文本编辑器&#xff0c;其有三种模式&#xff1a;命令模式、编辑模式(插入模式)、末行模式。命令模式——>编辑模式&#xff1a;“i a o I A O”linux编辑模式——>命令模式&#xff1a;“ESC”shell命令模式——>末行模式&#xff1…

centos6.8 环境一键安装包 nginx配置thinkphp5

---恢复内容开始--- lnmp1.4 一键安装包 nginx配置thinkphp5 环境&#xff1a;Nginx1.12.1 PHP5.6 Coentos6.8 修改网站配置文件 server{listen 443 ssl http2;#listen [::]:443 ssl http2;server_name xxx.cn;index index.html index.htm index.php default.html default.ht…

Linux下BitNami Redmine的插件安装与更新

截至2017年3月27日&#xff0c;Redmine-3.3.2-2安装以下的15款插件全部成功并通过测试&#xff08;下面显示为插件正确文件夹名&#xff09;&#xff1a; easy_wbs redmine_ckeditor 提供所见即所得编辑器 redmine_graphs 提供部分问题图表功能 progressive_projects_list 是…

Linux下redmine安装插件报错

报错如下&#xff1a; There was an error parsing Gemfile: compile error - syntax error, unexpected :, expecting $end gem tzinfo-data, platforms: [:mingw, :x64_mingw, :mswin, :jruby]^. Bundler cannot continue. 原因是&#xff1a; redmine不同版本对ruby版本有…

linux限制ping的时间,如何限制Linux命令程序运行的时间

Linux提供了大量的命令&#xff0c;每个命令都是唯一的&#xff0c;并且在特定的情况下使用。Linux的目标是帮助您尽可能地高效工作。Linux命令的一个属性是时间限制。您可以为任何您想要的命令设置时间限制。如果时间过期&#xff0c;命令停止执行。在本教程中&#xff0c;您将…

微软网络工具psping介绍

该工具功能主要包括&#xff1a;ICMP Ping、TCP Ping、延迟测试、带宽测试&#xff0c;而且它是微软出品的下载地址&#xff1a;https://download.sysinternals.com/files/PSTools.ziphttp://technet.microsoft.com/en-us/sysinternals/jj729731解压后把psping.exe丢到C:\Windo…

mac svn

https://formac.informer.com/tortoisesvn

linux无法下载ftp,linux 不能下载怎么办

linux 不能下载怎么办&#xff1f;关于Linux下vsftp匿名用户上传和下载的配置配置要注意三部分&#xff0c;请一一仔细对照&#xff1a;1、vsftpd.conf文件的配置(vi /etc/vsftpd/vsftpd.conf)&#xff03;允许匿名用户登录FTPanonymous_enableYES&#xff03;设置匿名用户的登…

Spring IOC实现原理

2019独角兽企业重金招聘Python工程师标准>>> 1、BeanDefinition 对依赖翻转模式中管理对象依赖关系的数据抽象 实现依赖翻转功能的核心数据结构依赖翻转功能都是围绕对BeanDefinition 处理完成的有了这些BeanDefinition 基础数据结构&#xff0c;容器才能发挥作用2、…

openlayers入门开发系列之图层控制

本篇的重点内容是利用openlayers实现地图图层控制功能&#xff0c;效果图如下&#xff1a; 部分核心代码如下&#xff1a;页面引用ztree插件图层管理器界面布局图层管理器初始化jsLayerSwitcher类定义详细的实现过程见&#xff1a;这里

windows版本的redis

redis官网是不提供windows版本的。 微软的github上有windows版本下载&#xff0c;不会是redis的最新版本&#xff0c;是基于redis稳定版本制作的。 redis官网关于文档版本的说明&#xff1a; Redis uses a standard practice for its versioning: major.minor.patchlevel. A…

一点一点看JDK源码(五)java.util.ArrayList 后篇之removeIf与Predicate

一点一点看JDK源码&#xff08;五&#xff09;java.util.ArrayList 后篇之removeIf与Predicate liuyuhang原创&#xff0c;未经允许禁止转载 本文举例使用的是JDK8的API 目录&#xff1a;一点一点看JDK源码&#xff08;〇&#xff09; Predicate为jdk1.8新增接口&#xff0c;由…

使用nginx代理,怎么获取真实的IP

1.在nginx.conf配置中加入配置信息 proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-NginX-Proxy true; 2.然后…

catcti监控linux主机,CentOS7搭建Prometheus 监控Linux主机

简介prometheus可以拆分成多个节点进行指标收集。安装prometheuswget -c https://github.com/prometheus/prometheus/releases/download/v2.23.0/prometheus-2.23.0.linux-amd64.tar.gztar zxvf prometheus-2.23.0.linux-amd64.tar.gz -C /opt/cd /opt/ln -s prometheus-2.23.…

linux 安装redis2.8.3,Linux及Windows安装Redis(详细)

标签&#xff1a;Linux及Windows安装Redis1.Windows安装教程1.1下载https://github.com/MSOpenTech/redis/releases进入github里下载redis Windows版压缩包将我们下载好的文件放进新建的一个Redis文件夹(我在C盘创建了一个redis的文件夹)1.2启动服务打开我们Windows版的dos命令…

Git 少用 Pull 多用 Fetch 和 Merge

转自&#xff1a;http://www.oschina.net/translate/git-fetch-and-merge --------------------------------------------------------------------------------- 本文有点长而且有点乱&#xff0c;但就像Mark Twain Blaise Pascal的笑话里说的那样&#xff1a;我没有时间让…