题目: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最多的方案的更多相关文章

  1. bzoj2660最多的方案——数位DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2660 首先,多种方案的出现是因为一个较大的斐波那契数可以变成两个较小的: 用一个01串来表示 ...

  2. bzoj2660: [Beijing wc2012]最多的方案

    题目链接 bzoj2660: [Beijing wc2012]最多的方案 题解 对于一个数的斐波那契数列分解,他的最少项分解是唯一的 我们在拆分成的相临两项之间分解后者,这样形成的方案是最优且不重的 ...

  3. [CF126D]Fibonacci Sums/[BJOI2012]最多的方案

    [CF126D]Fibonacci Sums/[BJOI2012]最多的方案 题目大意: 将\(n(n\le10^9)\)表示成若干个不同斐波那契数之和的形式,求方案数. 思路: 如果不考虑\(0\) ...

  4. BJOI2012 最多的方案

    BJOI2012 最多的方案 Description ​ 第二关和很出名的斐波那契数列有关,地球上的OIer都知道:F1=1, F2=2, Fi = Fi-1 + Fi-2,每一项都可以称为斐波那契数 ...

  5. bzoj千题计划213:bzoj2660: [Beijing wc2012]最多的方案

    http://www.lydsy.com/JudgeOnline/problem.php?id=2660 很容易想到是先把n表示成最大的两个斐波那契数相加,然后再拆分这两个斐波那契数 把数表示成斐波那 ...

  6. [BJOI2012]最多的方案(记忆化搜索)

    第二关和很出名的斐波那契数列有关,地球上的OIer都知道:F1=1, F2=2, Fi = Fi-1 + Fi-2,每一项都可以称为斐波那契数.现在给一个正整数N,它可以写成一些斐波那契数的和的形式. ...

  7. bzoj 2660: [Beijing wc2012]最多的方案

                       Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 617  Solved: 361[Submit][Status][ ...

  8. [luogu4133 BJOI2012] 最多的方案 (计数dp)

    题目描述 第二关和很出名的斐波那契数列有关,地球上的OIer都知道:F1=1, F2=2, Fi = Fi-1 + Fi-2,每一项都可以称为斐波那契数.现在给一个正整数N,它可以写成一些斐波那契数的 ...

  9. BZOJ 2660 (BJOI 2012) 最多的方案

    Description 第二关和很出名的斐波那契数列有关,地球上的OIer都知道:F1=1, F2=2, Fi = Fi-1 + Fi-2,每一项都可以称为斐波那契数.现在给一个正整数N,它可以写成一 ...

随机推荐

  1. 钉钉,连续获取Token一样么? Js_ticket重复获取一样么?

    经过测试,是一样的: Token的过期时间是2个小时: 2个小时后在获取则发生变化: js_ticket:  重复获取的值不同的:

  2. ZLYZD团队第四周项目总结

    ZLYD团队第四周项目总结 项目进展 将Wall.java.Gold.java.Player.java.Fruit.java.Enemy.java.Ticker.java和Packman.java七个 ...

  3. 使用4K显示器遇到的坑

    第一大坑:鼠标移动变慢,有强烈的滞后感 让人怀疑是不是系统因为要支持4K屏而变慢了,或者是鼠标坏了!甚至猜想是不是4K显示器的屏幕,因为分辨率太高,导致鼠标需要移动的点太多,因而耗时,产生了滞后感. ...

  4. python 十进制数转二进制数

    def convertToBinary(n): """Function to print binary number for the input decimal usin ...

  5. mysql导入source数据库

    首先要确保数据库存在,如果不存在则创建 方法1 source 很智能,很方便,很快捷. # mysql -uroot -p Enter password: Welcome to the MySQL m ...

  6. 如何借助 OVN 来提高 OVS 在云计算环境中的性能

    众所周知,OpenvSwitch 以其丰富的功能和不错的性能,已经成为 Openstack 部署中最受欢迎的虚拟交换机.由于 Openstack Neutron 的架构引入了一些性能问题,比如 neu ...

  7. Vue.js 计算属性是什么

    Vue.js 计算属性是什么 一.总结 一句话总结: 模板 表达式 维护 在模板中表达式非常便利,但是它们实际上只用于简单的操作.模板是为了描述视图的结构.在模板中放入太多的逻辑会让模板过重且难以维护 ...

  8. 豆知识( DNS; HTTP入门;网络协议)

    DNS入门知识 DNS服务器 通过DNS服务器,才能知道某个域名的IP地址到底是什么. Linux系统里面,DNS服务器的IP地址保存在/etc/resolv.conf文件 使用工具软件dig可以查询 ...

  9. Spring学习笔记1——基础知识

    1.在java开发领域,Spring相对于EJB来说是一种轻量级的,非侵入性的Java开发框架,曾经有两本很畅销的书<Expert one-on-one J2EE Design and Deve ...

  10. zoj-3329-期望/dp/方程优化

    One Person Game Time Limit: 1 Second      Memory Limit: 32768 KB      Special Judge There is a very ...