bzoj 2660: [Beijing wc2012]最多的方案
Submit: 617 Solved: 361
[Submit][Status][Discuss]
Description
第二关和很出名的斐波那契数列有关,地球上的OIer都知道:F1=1, F2=2, Fi = Fi-1 + Fi-2,每一项都可以称为斐波那契数。现在给一个正整数N,它可以写成一些斐波那契数的和的形式。如果我们要求不同的方案中不能有相同的斐波那契数,那么对一个N最多可以写出多少种方案呢?
Input
Output
Sample Input
Sample Output
HINT
Hint:16=3+13=3+5+8=1+2+13=1+2+5+8
对于30%的数据,n<=256
对于100%的数据,n<=10^18
直接记忆化搜索就行了,fibo(88)就已经>=10^18。
设g(x,y)为考虑前x个斐波那契数的和为y的方案数。
答案即为g(87,n)。
转移的时候可以剪枝:
1.当y<=f[x]的时候可以转移到g(x-1,y-f[x)。
2.当y<f[x+1]的时候才可以转移到g(x-1,y)。
解释一下第二个,因为斐波那契数列有注明前缀和公式 f(1)+f(2)+...+f(x)=f(x+2)-1 (证明可以考虑分
奇偶添补),所以当y>=f[x+1]的时候,g(x-1,y)一定是0了,不用再转移了。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
map<ll,ll> mmp[];
ll n,m,k,f[]; ll dp(int x,ll lef){
if(!lef) return ;
if(x==){
if(lef==) return ;
return ;
} if(mmp[x][lef]) return mmp[x][lef];
ll ans=;
if(lef>=f[x]) ans+=dp(x-,lef-f[x]);
if(lef<f[x+]) ans+=dp(x-,lef); mmp[x][lef]=ans;
return ans;
} int main(){
scanf("%lld",&n);
f[]=f[]=; int i;
for(i=;(f[i]=f[i-]+f[i-])<=n;i++); printf("%lld\n",dp(i-,n));
return ;
}
bzoj 2660: [Beijing wc2012]最多的方案的更多相关文章
- bzoj 2660: [Beijing wc2012]最多的方案【dp】
有点神奇的dp 首先注意到任意一个数都能被表示成若干个斐波那契数的和的形式 先求出n可以字典序最大的表示 设f[i][0/1]表示第i个斐波那契数选或者不选 如果当前数不选,那就选比他小的两个数,否则 ...
- bzoj2660: [Beijing wc2012]最多的方案
题目链接 bzoj2660: [Beijing wc2012]最多的方案 题解 对于一个数的斐波那契数列分解,他的最少项分解是唯一的 我们在拆分成的相临两项之间分解后者,这样形成的方案是最优且不重的 ...
- bzoj千题计划213:bzoj2660: [Beijing wc2012]最多的方案
http://www.lydsy.com/JudgeOnline/problem.php?id=2660 很容易想到是先把n表示成最大的两个斐波那契数相加,然后再拆分这两个斐波那契数 把数表示成斐波那 ...
- BZOJ 2660 (BJOI 2012) 最多的方案
Description 第二关和很出名的斐波那契数列有关,地球上的OIer都知道:F1=1, F2=2, Fi = Fi-1 + Fi-2,每一项都可以称为斐波那契数.现在给一个正整数N,它可以写成一 ...
- BZOJ 2662: [BeiJing wc2012]冻结(最短路)
这道题和 BZOJ 2763飞行路线 几乎一模一样..然后飞行路线我是1A,这道题WA了4次,我开始怀疑我的智商了.. ---------------------------------------- ...
- Bzoj 2662: [BeiJing wc2012]冻结 dijkstra,堆,分层图,最短路
2662: [BeiJing wc2012]冻结 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 647 Solved: 348[Submit][Sta ...
- bzoj 2659: [Beijing wc2012]算不出的算式
2659: [Beijing wc2012]算不出的算式 Time Limit: 3 Sec Memory Limit: 128 MB Description 算不出的算式背景:曾经有一个老掉牙的游 ...
- BZOJ 2661: [BeiJing wc2012]连连看 费用流
2661: [BeiJing wc2012]连连看 Description 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规则是,给出一个闭 ...
- BZOJ 2663: [Beijing wc2012]灵魂宝石
2663: [Beijing wc2012]灵魂宝石 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 261 Solved: 108[Submit][S ...
随机推荐
- 【BZOJ 2503】相框 图论+讨论
这道题目就是考验了一下图论基本知识与对可爱的代码实现的应对能力. 我们先分析题干信息.我们要形成相框,那么所有的点的度为2(参与的点),那么所有度大于2的点都需要熔断,而且一次完成所有关于这个点的熔断 ...
- boost 文件操作
void testFileSystem() { boost::filesystem::path path("/test/test1"); //初始化 boost::filesyst ...
- 湖南大学第十四届ACM程序设计新生杯 Dandan's lunch
Dandan's lunch Description: As everyone knows, there are now n people participating in the competiti ...
- Tumblr:150亿月浏览量背后的架构挑战
Tumblr:150亿月浏览量背后的架构挑战 2013/04/08 · IT技术, 开发 · 9.9K 阅读 · HBase, Tumblr, 架构 英文原文:High Scalability,编译: ...
- 使用 FirewallD 构建动态防火墙
使用 FirewallD 构建动态防火墙 FirewallD 提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具.它支持 IPv4, IPv6 防火墙设置以及以太网 ...
- 线段树+矩阵快速幂 Codeforces Round #373 (Div. 2) E
http://codeforces.com/contest/719/problem/E 题目大意:给你一串数组a,a[i]表示第i个斐波那契数列,有如下操作 ①对[l,r]区间+一个val ②求出[l ...
- Codeforces Round #475 Div. 2 A B C D
A - Splits 题意 将一个正整数拆分成若干个正整数的和,从大到小排下来,与第一个数字相同的数字的个数为这个拆分的权重. 问\(n\)的所有拆分的不同权重可能个数. 思路 全拆成1,然后每次将2 ...
- Swift 闭包(六)
http://blog.csdn.net/huangchentao/article/details/32714185 闭包 Closures 1.闭包表达式 闭包表达式是一种利用简单语法构建内联包的方 ...
- linux===linux在线模拟器汇总
jslinux: http://bellard.org/jslinux/ 一个叫Fabrice Bellard的工程师使用 JavaScript 在浏览器上模拟出了一个 Linux 系统.没有图形化界 ...
- StringUtils工具类的使用
注意isNotEmpty()和isNotBlank()的区别 过去的字符串判空:if("".equals(str) || str == null).现在使用工具类StringUti ...