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;
}

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 2660: [Beijing wc2012]最多的方案【dp】

    有点神奇的dp 首先注意到任意一个数都能被表示成若干个斐波那契数的和的形式 先求出n可以字典序最大的表示 设f[i][0/1]表示第i个斐波那契数选或者不选 如果当前数不选,那就选比他小的两个数,否则 ...

  3. bzoj2660最多的方案

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2660 当然可以看出  选了第 i 个斐波那契数<=>选了第 i - 1 和第 i ...

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

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

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

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

  6. BJOI2012 最多的方案

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

  7. BZOJ.2660.[BJOI2012]最多的方案(DP)

    题目链接 首先我们知道: 也很好理解.如果相邻两项出现在斐波那契表示法中,那它们显然可以合并. 所以我们能得到\(n\)的斐波那契表示,记\(pos[i]\)为\(n\)的斐波那契表示法中,第\(i\ ...

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

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

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

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

随机推荐

  1. Tomcat7安装和配置以及优化

    安装Tomcat7 下载安装方法一: 直接下载Tomcat7: wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-7/v7.0 ...

  2. Java Selenium起步

    先将录制的脚本导出来,转成java的格式 在Eclipse中编辑并运行test     2.1 新建一个Java project: File-New-Java Project     2.2 在上一步 ...

  3. 笔记32 SpringMVC中使用静态资源、处理中文乱码

    一.静态资源的使用 在WebConfig.java中有如下代码段 @Override // 配置静态资源处理 public void configureDefaultServletHandling(D ...

  4. one-hot encoding与哑变量的区别

    one-hot encoding与哑变量的区别 one-hot比哑变量的特征位多一位,即哑变量是精简版的one-hot,即在线性回归中用截距项来表示最后一维,但由于最初很难分辨特征的主次关系,且机器学 ...

  5. 字符串利用%02d将月份前加0

    i = 20190104 a = 2019 b = 1 c = 4 s = "%04d-%02d-%02d" % (a, b, c)

  6. Linux系统升级

    查看centos版本的命令:uname -r 升级版本:yum -y upgrade 重启:reboot

  7. jq-demo-2种吸顶效果

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. spring boot 项目启动无法访问,排查

    查看docker日志,后台应用正常启动,定时任务正常执行,但是前端无法访问到后端接口,点击提示系统错误,解压出项目二级域名,访问域名,报错:Kong Error,说明Kong路由转发没有绑定项目端口, ...

  9. Ruby 数据类型

    Ruby 数据类型 本章节我们将为大家介绍 Ruby 的基本数据类型. Ruby支持的数据类型包括基本的Number.String.Ranges.Symbols,以及true.false和nil这几个 ...

  10. 38 ubuntu/windows双系统安装

    0 引言 (1)针对bios 和 uefi引导,安装方式略有不同. (2)针对nvidia显卡,在安装时需要特殊设置. 1 EasyBCD安装方式介绍-适用于bios引导方式 参考百度经验贴安装即可, ...