洛谷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; }
洛谷P4133 [BJOI2012]最多的方案(记忆化搜索)相关推荐
- 洛谷:尼克的任务【记忆化搜索】【记忆化搜索的使用条件】
个人对记忆化搜索有以下感悟[不保证一定正确,但保证有参考价值] 我们将搜索的过程看成在一个有向无环图上遍历的过程[也必然是这个过程]: 首先,记忆化搜索之所以能让时间复杂度为指数级别的搜索过程降到线性 ...
- BZOJ 1079: [SCOI2008]着色方案 记忆化搜索
1079: [SCOI2008]着色方案 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- BZOJ1079 [SCOI2008]着色方案 记忆化搜索
1079: [SCOI2008]着色方案 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2826 Solved: 1682 [Submit][St ...
- 洛谷 2921 记忆化搜索 tarjan 基环外向树
洛谷 2921 记忆化搜索 tarjan 传送门 (https://www.luogu.org/problem/show?pid=2921) 做这题的经历有点玄学,,起因是某个random题的同学突然 ...
- 洛谷3953 (NOIp2017) 逛公园——记忆化搜索+用栈判0环
题目:https://www.luogu.org/problemnew/show/P3953 因为K只有50,所以想到用dp[ cr ][ j ]表示在点cr.比最短路多走了 j 的方案数.(看了TJ ...
- 洛谷P1057 传球游戏(记忆化搜索)
点我进入题目 题目大意:n个小孩围一圈传球,每个人可以给左边的人或右边的人传球,1号小孩开始,一共传m次,请问有多少种可能的路径使球回到1号小孩. 输入输出:输入n,m,输出路径的数量. 数据范围:4 ...
- 巧用记忆化搜索代替暴力递归(洛谷P1464题题解,Java语言描述)
题目要求 P1464题目链接 分析 如果--你信了这题干,真的写了递归--TLE警告!!! 所以,就需要优化嘛-- [−9223372036854775808,9223372036854775807] ...
- 洛谷 p1434 滑雪【记忆化搜索】
<题目链接> Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...
- 洛谷 P1434 [SHOI2002]滑雪(DP,记忆化搜索)
题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道在一个区域中最长 ...
最新文章
- 企业网络高级技术第二章STP实验
- 简述网络文件系统NFS,并说明其作用。
- usb_get_device_descriptor()
- Python接口测试之requests
- docker 安装redis
- 如何检测远程主机上的某个端口是否开启
- 为什么构造函数不能声明为虚函数,析构函数可以,构造函数中为什么不能调用虚函数?
- C# Aspose.Word 操作word文档(利用模板)
- 【SCOI2005】【BZOJ1087】互不侵犯King(状压dp)
- LwIP应用开发笔记之四:LwIP无操作系统TFTP服务器
- 构建项目时发生错误 - 错误:CS0006“... \ Assembly-CSharp-firstpass.dll”找不到
- JAVA中的“+”、“concat”和“append”
- vibe算法 c++实现
- BP神经网络与RBF神经网络matlab代码实现
- 堆密度测定的意义_什么叫真密度_真密度的测定_真密度和表观密度、堆积密度-仪器网...
- 时间线故事脚本_时间轴的创意脚本
- P11 - 数据流图 之 DFD进行数据流建模
- 仿微软Video Indexer——视频断点播放与智能解析时间线的前端可视化实现
- 700页JVM虚拟机实战手册,呕心巨作,值得一看
- 蓝色插画风新媒体运营转正汇报PPT模板
热门文章
- kali linux 双显卡,Kali上双显卡驱动的安装
- mysql连接代替子查询_MySQL优化之使用连接(join)代替子查询
- 剑与轮回找回服务器,剑与轮回自由之都1服开服时间表_剑与轮回新区开服预告_第一手游网手游开服表...
- c语言指针化简带分数,c语言带分数四则运算问题!!!要求被调函数,化简.
- php的cms是什么意思,phpcms是什么
- java对xml解析_Java中对xml的解析
- 工业机器人导轨 百度文库_工业机器人或许开创一个全新的PLC时代
- android 基类fragment,Android DialogFragment 基类的定制
- android如何实现QQ信息通知,android NotificationListenerService监听通知栏(qq 微信 短信)...
- 华为升级harmonyos的机型名单,华为鸿蒙 OS 2.0 系统适配名单已出,四月推送,天玑机型暂时无缘...