题目链接

bzoj2660: [Beijing wc2012]最多的方案

题解

对于一个数的斐波那契数列分解,他的最少项分解是唯一的

我们在拆分成的相临两项之间分解后者,这样形成的方案是最优且不重的

我们可以把它的分解某一项拆分

设dp[i][1/0]表示 对于最少拆分成的第i项斐波那切数拆不拆

在上一项j与这一项i的斐波那契数之间拆i项共有(i-j)/2种拆分方法,

转移方程就有了

代码

/*
对于一个数的斐波那契数列分解,他的最少项分解是唯一的
我们在拆分成的相临两项之间分解后者,这样形成的方案是最优且不重的
我们可以把它的分解某一项拆分
设dp[i][1/0]表示 对于最少拆分成的第i项斐波那切数拆不拆
在上一项j与这一项i的斐波那契数之间拆i项共有(i-j)/2种拆分方法,
转移方程就有了
*/
#include<vector>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
inline int read() {
int x = 0,f = 1;char c = getchar();
while(c < '0'||c > '9')c = getchar();
while(c <= '9' &&c >= '0')x = x * 10 + c - '0',c = getchar();
return x * f;
}
LL f[107];
int a[107],tmp[107];
LL dp[107][2];
int main() {
f[1] = 1;f[2] = 2;
LL n;
scanf("%lld",&n);
int num = 3; for(num = 3;;++ num) {f[num] = f[num - 1] + f[num - 2]; if(f[num] > n) break;}
int sum = 0;
for(int i = num;i >= 1;-- i) if(n >= f[i]) n -= f[i],tmp[++ sum] = i;
for(int cnt = 0,i = sum;i >= 1;-- i) a[++ cnt] = tmp[i];
dp[1][1] = 1;
dp[1][0] = a[1] - 1 >> 1;
for(int i = 2;i <= sum;++ i) {
dp[i][1] = dp[i - 1][1] + dp[i - 1][0];
dp[i][0] = dp[i - 1][1] * (a[i] - a[i - 1] - 1 >> 1) + dp[i - 1][0] * (a[i] - a[i - 1] >> 1);
}
printf("%lld\n",dp[sum][1] + dp[sum][0]);
return 0;
}

bzoj2660: [Beijing wc2012]最多的方案的更多相关文章

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

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

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

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

  3. bzoj 2660: [Beijing wc2012]最多的方案【dp】

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

  4. bzoj2660最多的方案

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

  5. Bzoj 2662: [BeiJing wc2012]冻结 dijkstra,堆,分层图,最短路

    2662: [BeiJing wc2012]冻结 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 647  Solved: 348[Submit][Sta ...

  6. BZOJ 2662: [BeiJing wc2012]冻结(最短路)

    这道题和 BZOJ 2763飞行路线 几乎一模一样..然后飞行路线我是1A,这道题WA了4次,我开始怀疑我的智商了.. ---------------------------------------- ...

  7. BZOJ_2662_[BeiJing wc2012]冻结_分层图最短路

    BZOJ_2662_[BeiJing wc2012]冻结_分层图最短路 Description “我要成为魔法少女!”     “那么,以灵魂为代价,你希望得到什么?” “我要将有关魔法和奇迹的一切, ...

  8. 分层图最短路【bzoj2662】[BeiJing wc2012]冻结

    分层图最短路[bzoj2662][BeiJing wc2012]冻结 Description "我要成为魔法少女!" "那么,以灵魂为代价,你希望得到什么?" ...

  9. bzoj 2659: [Beijing wc2012]算不出的算式

    2659: [Beijing wc2012]算不出的算式 Time Limit: 3 Sec  Memory Limit: 128 MB Description 算不出的算式背景:曾经有一个老掉牙的游 ...

随机推荐

  1. Linux基础-host文件解析

    任务目标:为集群内的机器设定主机名,利用/etc/hosts文件来解析自己的集群中所有的主机名, 相应的集群的配置应该改成使用主机名的方式 使用 hostnamectl set-hostname 设定 ...

  2. 防范xss的正确姿势

    防范xss的正确姿势 xss攻击是web攻击中非常常见的一种攻击手段.如果你还没有听说过xss攻击,可以先了解xss的相关知识和原理,例如: XSS)" target="_blan ...

  3. Shiro认证的另一种方式

    今天在学习shiro的时候使用另一种shiro验证的方式. 总体的思路是: (1)先在自己的方法中进行身份的验证以及给出提示信息.(前提是将自己的验证方法设为匿名可访问) (2)当验证成功之后到Shi ...

  4. mysql优化【转】

    最近听讲了博森瑞老师的mysql优化公开课,这个是我整理的笔记. 现在说一下mysql的内存和I/O方面的两个特点. 一. mysql内存特点: 1.  也有全局内存和每个session的内存(每个s ...

  5. 使用pandas把mysql的数据导入MongoDB。

    使用pandas把mysql的数据导入MongoDB. 首先说下我的需求,我需要把mysql的70万条数据导入到mongodb并去重, 同时在第二列加入一个url字段,字段的值和第三列的值一样,代码如 ...

  6. C# 链接webservice报错

    未处理 System.ServiceModel.EndpointNotFoundException  Message="没有终结点对可能接受消息的 http://192.168.0.168/ ...

  7. STM32 IAP升级

    STM32 IAP在线升级,用Jlink设置读保护后前5K字节是默认加了写保护的,导致IAP升级时擦除和写入FLASH不成功,可以做两个boot,前5k为第一个boot程序,上电时负责跳转到APP还是 ...

  8. poj1976

    dp #include <cstdio> #include <cstring> #include <algorithm> using namespace std; ...

  9. python基础-实现进度条功能,for和yield实现

    实现进度条功能 方法一:简单FOR实现打印进度条功能 for i in range(10): print("#",end="",flush=True) time ...

  10. Java字符串拼接效率对比

    1.来自:http://blog.csdn.net/Zen99T/article/details/51255418 2.来自:http://blog.csdn.net/kimsoft/article/ ...