bzoj千题计划213:bzoj2660: [Beijing wc2012]最多的方案
http://www.lydsy.com/JudgeOnline/problem.php?id=2660
很容易想到是先把n表示成最大的两个斐波那契数相加,然后再拆分这两个斐波那契数
把数表示成斐波那契进制的形式,第i位表示有没有第i个斐波那契数
比如16=13+3 001001
那么拆分一个数就是把一个1变成0,左边的两个0变成1
前面的1不影响后面
后面1拆出的两个1不能拆到前面1的前面
所以b[i] 表示n的第i个1是第几项斐波那契数
所以dp[i][0/1] 表示b中的i所在位(n的第b[i]个1)是0/1的方案数
如果这个位是1,dp[i][0]=dp[i-1][0]+dp[i-1][1]
如果这个位是0,即这个1被拆了,他能拆的次数是 与前面的1之间的0的个数/2
所以若i-1是1,两个1之间有 b[i]-b[i-1]-1个0
若i-1是0,两个1之间有b[i]-b[i-1]个0
dp[i][1]=dp[i-1][1]*(b[i]-b[i-1]-1)/2+dp[i-1][0]*(b[i]-b[i-1])/2
#include<cstdio>
#include<algorithm> typedef long long LL; using namespace std; LL f[]; int b[]; LL dp[][]; int main()
{
LL n;
scanf("%lld",&n);
f[]=; f[]=;
int t;
for(t=;f[t-]+f[t-]<=n;++t) f[t]=f[t-]+f[t-];
int m=;
for(int i=t-;i;--i)
if(n>=f[i]) b[++m]=i,n-=f[i];
reverse(b+,b+m+);
dp[][]=;
dp[][]=b[]->>;
for(int i=;i<=m;++i)
{
dp[i][]=dp[i-][]+dp[i-][];
dp[i][]=dp[i-][]*(b[i]-b[i-]->>)+dp[i-][]*(b[i]-b[i-]>>);
}
printf("%lld",dp[m][]+dp[m][]);
}
bzoj千题计划213:bzoj2660: [Beijing wc2012]最多的方案的更多相关文章
- bzoj2660: [Beijing wc2012]最多的方案
题目链接 bzoj2660: [Beijing wc2012]最多的方案 题解 对于一个数的斐波那契数列分解,他的最少项分解是唯一的 我们在拆分成的相临两项之间分解后者,这样形成的方案是最优且不重的 ...
- bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块
http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...
- bzoj千题计划196:bzoj4826: [Hnoi2017]影魔
http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...
- bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪
http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...
- bzoj千题计划177:bzoj1858: [Scoi2010]序列操作
http://www.lydsy.com/JudgeOnline/problem.php?id=1858 2018 自己写的第1题,一遍过 ^_^ 元旦快乐 #include<cstdio> ...
- bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)
https://www.lydsy.com/JudgeOnline/problem.php?id=4650 如果能够预处理出 suf[i] 以i结尾的形式为AA的子串个数 pre[i] 以i开头的形式 ...
- bzoj千题计划304:bzoj3676: [Apio2014]回文串(回文自动机)
https://www.lydsy.com/JudgeOnline/problem.php?id=3676 回文自动机模板题 4年前的APIO如今竟沦为模板,,,╮(╯▽╰)╭,唉 #include& ...
- bzoj千题计划292:bzoj2244: [SDOI2011]拦截导弹
http://www.lydsy.com/JudgeOnline/problem.php?id=2244 每枚导弹成功拦截的概率 = 包含它的最长上升子序列个数/最长上升子序列总个数 pre_len ...
- bzoj千题计划278:bzoj4590: [Shoi2015]自动刷题机
http://www.lydsy.com/JudgeOnline/problem.php?id=4590 二分 这么道水题 没long long WA了两发,没判-1WA了一发,二分写错WA了一发 最 ...
随机推荐
- jquery原理的简单分析,让你扒开jquery的小外套。
引言 最近LZ还在消化系统原理的第三章,因此这部分内容LZ打算再沉淀一下再写.本次LZ和各位来讨论一点前端的内容,其实有关jquery,在很久之前,LZ就写过一篇简单的源码分析.只不过当时刚开始写博客 ...
- Js_获取浏览器等高宽
IE中: document.body.clientWidth ==> BODY对象宽度 document.body.clientHeight ==> BODY对象高度 document. ...
- FME Cloud 账号申请流程
第一步,访问SAFE的FME Cloud注册页,官网明确表态,如果你是一个新的FME Cloud用户,你可以免费获得一个初级版.地址:https://console.fmecloud.safe.com ...
- Unity 2D相机公式换算(从其他博客上抄的)
2d camera, unit坐标,单位换算 2d游戏可以使用平行投影的camera,这种camera需要设置size (orthographicSize),size的含义为屏幕高度的一半,不过单位不 ...
- dokuwiki工具栏添加换行回车快捷键与按钮
需求 dokuwiki的语法要求以 \\ 为换行符(\\后面必须有1个空格).编辑器有快捷键.快捷键说明如下.https://www.dokuwiki.org/start?id=zh-tw:acces ...
- 利用顺序栈解决括号匹配问题(c++)-- 数据结构
题目: 7-1 括号匹配 (30 分) 给定一串字符,不超过100个字符,可能包括括号.数字.字母.标点符号.空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配. 输入格式: 输入在一行 ...
- 微软职位内部推荐-Principal Software Eng Mgr
微软近期Open的职位: Job Title:   Principal Software Eng Mgr Work Location: Shanghai, China Job Desc ...
- Java实验报告(实验五)
课程:Java程序设计 班级:1351 姓名:王玮怡 学号:20135116 成绩: 指导教师: ...
- 《Linux内核分析》第二周学习小结 操作系统是如何工作的?
郝智宇 无转载 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.函数调用堆栈: 1.计算机是 ...
- 20135234mqy-——信息安全系统设计基础第十三周学习总结
第十一章 网络编程 11.1 客户端-服务器编程模型 基本操作:事务 当一个客户端需要服务时,向服务器发送一个请求,发起一个事务. 服务器收到请求后,解释它,并以适当的方式操作它的资源. 服务器给客户 ...