bzoj2660最多的方案
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2660
当然可以看出 选了第 i 个斐波那契数<=>选了第 i - 1 和第 i - 2 个斐波那契数;
还有一个关键是:题目给出的这个数能表示成几个斐波那契数的和<=>该数可以被用斐波那契数分解。
如果把选不选每一个斐波那契数用二进制表示的话,首先要尽量使最高位最大,才能算出最多的方案。
把第一次分解的那些斐波那契数的位置记录下来,用dp表示这些数选不选。
若选这个数,则上一个选了或者没选而分解到更小的都行;
若不选这个数,则它的方案数画一画就知道是 它与上一个分解出的数中间的0的个数 * 选上一个数 + (……0的个数+1)*不选上一个数;
我觉得自己应该好好利用斐波那契数的这个写在第一行的性质。本题怎么可能不与这有关呢?
自己考虑到“上一个数也可以不选而……”的时候就不行了,这是没有考虑到利用自己假设已经算出来的值(即“不选这个数的方案数”);还是经验不足吧。
蜜汁:注释掉的部分有什么不对?
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=1e6+;
ll n,c[N],cnt,dp[][],pos[N],xnt;
int main()
{
scanf("%lld",&n);
c[]=;c[]=;
for(int i=;c[i-]<=n;i++)c[i]=c[i-]+c[i-],cnt=i-;
for(int i=cnt;i&&n;i--)if(c[i]<=n)n-=c[i],pos[++xnt]=i;
// dp[xnt][1]=1;dp[xnt][0]=(pos[xnt]-1)/2;/////
// for(int i=xnt-1;i;i--)
// {
// dp[i][1]=dp[i+1][0]+dp[i+1][1];
// dp[i][0]=dp[i+1][0]*(pos[i]-pos[i+1])/2+dp[i+1][1]*(pos[i]-pos[i+1]-1)/2;
// }
// printf("%lld",dp[1][0]+dp[1][1]);
sort(pos+,pos+xnt+);
dp[][]=;dp[][]=(pos[]-)/;
for(int i=;i<=xnt;i++)
{
dp[i][]=dp[i-][]+dp[i-][];
dp[i][]=(pos[i]-pos[i-])/*dp[i-][]+(pos[i]-pos[i-]-)/*dp[i-][];
}
printf("%lld",dp[xnt][]+dp[xnt][]);
return ;
}
bzoj2660最多的方案的更多相关文章
- bzoj2660最多的方案——数位DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2660 首先,多种方案的出现是因为一个较大的斐波那契数可以变成两个较小的: 用一个01串来表示 ...
- bzoj2660: [Beijing wc2012]最多的方案
题目链接 bzoj2660: [Beijing wc2012]最多的方案 题解 对于一个数的斐波那契数列分解,他的最少项分解是唯一的 我们在拆分成的相临两项之间分解后者,这样形成的方案是最优且不重的 ...
- [CF126D]Fibonacci Sums/[BJOI2012]最多的方案
[CF126D]Fibonacci Sums/[BJOI2012]最多的方案 题目大意: 将\(n(n\le10^9)\)表示成若干个不同斐波那契数之和的形式,求方案数. 思路: 如果不考虑\(0\) ...
- BJOI2012 最多的方案
BJOI2012 最多的方案 Description 第二关和很出名的斐波那契数列有关,地球上的OIer都知道:F1=1, F2=2, Fi = Fi-1 + Fi-2,每一项都可以称为斐波那契数 ...
- bzoj千题计划213:bzoj2660: [Beijing wc2012]最多的方案
http://www.lydsy.com/JudgeOnline/problem.php?id=2660 很容易想到是先把n表示成最大的两个斐波那契数相加,然后再拆分这两个斐波那契数 把数表示成斐波那 ...
- [BJOI2012]最多的方案(记忆化搜索)
第二关和很出名的斐波那契数列有关,地球上的OIer都知道:F1=1, F2=2, Fi = Fi-1 + Fi-2,每一项都可以称为斐波那契数.现在给一个正整数N,它可以写成一些斐波那契数的和的形式. ...
- bzoj 2660: [Beijing wc2012]最多的方案
Time Limit: 5 Sec Memory Limit: 128 MB Submit: 617 Solved: 361[Submit][Status][ ...
- [luogu4133 BJOI2012] 最多的方案 (计数dp)
题目描述 第二关和很出名的斐波那契数列有关,地球上的OIer都知道:F1=1, F2=2, Fi = Fi-1 + Fi-2,每一项都可以称为斐波那契数.现在给一个正整数N,它可以写成一些斐波那契数的 ...
- BZOJ 2660 (BJOI 2012) 最多的方案
Description 第二关和很出名的斐波那契数列有关,地球上的OIer都知道:F1=1, F2=2, Fi = Fi-1 + Fi-2,每一项都可以称为斐波那契数.现在给一个正整数N,它可以写成一 ...
随机推荐
- 钉钉,连续获取Token一样么? Js_ticket重复获取一样么?
经过测试,是一样的: Token的过期时间是2个小时: 2个小时后在获取则发生变化: js_ticket: 重复获取的值不同的:
- ZLYZD团队第四周项目总结
ZLYD团队第四周项目总结 项目进展 将Wall.java.Gold.java.Player.java.Fruit.java.Enemy.java.Ticker.java和Packman.java七个 ...
- 使用4K显示器遇到的坑
第一大坑:鼠标移动变慢,有强烈的滞后感 让人怀疑是不是系统因为要支持4K屏而变慢了,或者是鼠标坏了!甚至猜想是不是4K显示器的屏幕,因为分辨率太高,导致鼠标需要移动的点太多,因而耗时,产生了滞后感. ...
- python 十进制数转二进制数
def convertToBinary(n): """Function to print binary number for the input decimal usin ...
- mysql导入source数据库
首先要确保数据库存在,如果不存在则创建 方法1 source 很智能,很方便,很快捷. # mysql -uroot -p Enter password: Welcome to the MySQL m ...
- 如何借助 OVN 来提高 OVS 在云计算环境中的性能
众所周知,OpenvSwitch 以其丰富的功能和不错的性能,已经成为 Openstack 部署中最受欢迎的虚拟交换机.由于 Openstack Neutron 的架构引入了一些性能问题,比如 neu ...
- Vue.js 计算属性是什么
Vue.js 计算属性是什么 一.总结 一句话总结: 模板 表达式 维护 在模板中表达式非常便利,但是它们实际上只用于简单的操作.模板是为了描述视图的结构.在模板中放入太多的逻辑会让模板过重且难以维护 ...
- 豆知识( DNS; HTTP入门;网络协议)
DNS入门知识 DNS服务器 通过DNS服务器,才能知道某个域名的IP地址到底是什么. Linux系统里面,DNS服务器的IP地址保存在/etc/resolv.conf文件 使用工具软件dig可以查询 ...
- Spring学习笔记1——基础知识
1.在java开发领域,Spring相对于EJB来说是一种轻量级的,非侵入性的Java开发框架,曾经有两本很畅销的书<Expert one-on-one J2EE Design and Deve ...
- zoj-3329-期望/dp/方程优化
One Person Game Time Limit: 1 Second Memory Limit: 32768 KB Special Judge There is a very ...