Description

   第二关和很出名的斐波那契数列有关,地球上的OIer都知道:F1=1, F2=2, Fi = Fi-1 + Fi-2,每一项都可以称为斐波那契数。现在给一个正整数N,它可以写成一些斐波那契数的和的形式。如果我们要求不同的方案中不能有相同的斐波那契数,那么对一个N最多可以写出多少种方案呢?

Input

   只有一个整数N。

Output

   一个方案数

Sample Input

   16

Sample Output

   4

HINT

Hint:16=3+13=3+5+8=1+2+13=1+2+5+8

对于30%的数据,n<=256

对于100%的数据,n<=10^18

————————————————————————————–

题解

首先,任何数都能分解成几个斐波那契数列的和(一定有解),所以先将这个数字拆成几个斐波那契数相
加的形式,编号记为pos[i],又因为每个斐波那契数可以分解继续成接下来的两项之和,我们就要考虑
pos[i]与pos[i-1]的位置关系与其元素是否继续分解。
dp[i][0/1]表示斐波那契中第i项替换或不替换。
转移方程为:dp[i][1]=dp[i-1][0]+dp[i-1][1];dp[i][0]=dp[i-1][0]*(pos[i]-pos[i-1]>>1)+dp[i][1]*(pos-pos[i-1]-1>>1);

代码

#include<bits/stdc++.h>using namespace std;long long n,fab[90];
int cnt,pos[90],dp[90][2];int main(){
    fab[1]=1;fab[2]=2;
    cin>>n;
    for(register int i=3;i<=85;i++)
        fab[i]=fab[i-1]+fab[i-2];
    for(register int i=85;i>=1;i--)
        if(n>=fab[i]){            n-=fab[i];
            pos[++cnt]=i;
        }
    sort(pos+1,pos+1+cnt);
    dp[1][1]=1;dp[1][0]=pos[1]-1>>1;
    for(register int i=2;i<=cnt;i++){        dp[i][1]=dp[i-1][0]+dp[i-1][1];
        dp[i][0]=dp[i-1][0]*(pos[i]-pos[i-1]>>1)+dp[i-1][1]*(pos[i]-pos[i-1]-1>>1);
    }
    cout<<dp[cnt][0]+dp[cnt][1]<<endl;
    return 0;
}

转载于:https://www.cnblogs.com/sdfzsyq/p/9677090.html

BZOJ 2660 (BJOI 2012) 最多的方案相关推荐

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

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

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

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

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

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

  4. 洛谷P4133 [BJOI2012]最多的方案(记忆化搜索)

    题意 题目链接 求出把$n$分解为斐波那契数的方案数,方案两两不同的定义是分解出来的数不完全相同 Sol 这种题,直接爆搜啊... 打表后不难发现$<=1e18$的fib数只有88个 最先想到的 ...

  5. BJOI 2012 求和

    https://www.luogu.org/problemnew/show/P4427 因为这个题,我交了整整两页... 题目不难,预处理+lca 一个奇坑点:预处理sum的时候,你是不能取模的,因为 ...

  6. 2017.10.22 最多的方案 失败总结

    老想着数表结合的方法,,结果就是找不到规律. 这个题看起来好像是一个函数就可以做,但其实不是的,斐波那契函数有很好的形势:f[i]=f[i-1]+f[i-2], 他可以看成两个点转移到一个点,也可以看 ...

  7. bzoj 乱刷计划 50/50

    前言 话说第一个板刷计划由于种种原因而告一段落了..其实那一版还有很多题想做,那就只能放一放了 附上效果图一张(几乎每一题都在我博客有题解): 打算 可以复习,重做自己做过的题,不局限于没做过的 乱刷 ...

  8. BZOJ 2244: [SDOI2011]拦截导弹 DP+CDQ分治

    2244: [SDOI2011]拦截导弹 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度.并且能够拦截 ...

  9. bzoj 2244: [SDOI2011]拦截导弹

    Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度.并且能够拦截任意速度的导弹,但是以后每一发炮弹都不能高 ...

最新文章

  1. 2013年7月12日“修复 Migration 测试发现的 Bug”
  2. linux base64 文件大小,linux下使用base64进行加密和解密
  3. Swift之深入解析异步函数async/await的使用与运行机制
  4. QPW 邀请日志表(tf_invite_log)
  5. javascript Array学习与使用
  6. FPGA状态机三段式
  7. kinect 手势识别的原理?
  8. hdu-5583 Kingdom of Black and White(数学,贪心,暴力)
  9. 将米转换为度(经纬度) 画圆上下多出来一些区域
  10. 生成dump文件需要多久_php8的扩展arginfo生成工具
  11. 理顺 JavaScript (7) - 数字相关问题
  12. linux jar运行监控 mo,linux系统监控利器--monit
  13. robocopy 备份_robocopy的用法,数据库局域网备份
  14. Win7启动慢,元凶竟是闲置eSATA接口,快下补丁
  15. 缠中说禅形态挖掘之七笔形态
  16. 注册Google Pay企业开发者账号
  17. veeam的备份策略(每周6增量备份,每周日合成全量备份)
  18. thinkadmin 配置 iis 宝塔、护卫神、phpstudy伪静态设置
  19. 电脑好用的ftp软件,推荐10款电脑好用的ftp软件
  20. 告别福禄克DTX系列,欢迎dsx2-5000网线测试

热门文章

  1. CSS3的radial-gradient(径向渐变)
  2. Ext.grid.Panel一定要有renderTo或autoRender属性,不然页面为空
  3. (转)getElementByID getElementsByName getElementsByTagName用法详解
  4. Mr.J--树、二叉树、森林的转换
  5. redis缓存失效及解决方案
  6. jwt https://mp.weixin.qq.com/s/8FdzMq4msyhqE9Rrhgwqjw
  7. 年轻人有梦想,老人有回忆
  8. A - Super Jumping! Jumping! Jumping!
  9. hadoop学习日志
  10. php基础_变量和比较符