bzoj2660: [Beijing wc2012]最多的方案
题目链接
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]最多的方案的更多相关文章
- bzoj千题计划213:bzoj2660: [Beijing wc2012]最多的方案
http://www.lydsy.com/JudgeOnline/problem.php?id=2660 很容易想到是先把n表示成最大的两个斐波那契数相加,然后再拆分这两个斐波那契数 把数表示成斐波那 ...
- bzoj 2660: [Beijing wc2012]最多的方案
Time Limit: 5 Sec Memory Limit: 128 MB Submit: 617 Solved: 361[Submit][Status][ ...
- bzoj 2660: [Beijing wc2012]最多的方案【dp】
有点神奇的dp 首先注意到任意一个数都能被表示成若干个斐波那契数的和的形式 先求出n可以字典序最大的表示 设f[i][0/1]表示第i个斐波那契数选或者不选 如果当前数不选,那就选比他小的两个数,否则 ...
- bzoj2660最多的方案
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2660 当然可以看出 选了第 i 个斐波那契数<=>选了第 i - 1 和第 i ...
- Bzoj 2662: [BeiJing wc2012]冻结 dijkstra,堆,分层图,最短路
2662: [BeiJing wc2012]冻结 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 647 Solved: 348[Submit][Sta ...
- BZOJ 2662: [BeiJing wc2012]冻结(最短路)
这道题和 BZOJ 2763飞行路线 几乎一模一样..然后飞行路线我是1A,这道题WA了4次,我开始怀疑我的智商了.. ---------------------------------------- ...
- BZOJ_2662_[BeiJing wc2012]冻结_分层图最短路
BZOJ_2662_[BeiJing wc2012]冻结_分层图最短路 Description “我要成为魔法少女!” “那么,以灵魂为代价,你希望得到什么?” “我要将有关魔法和奇迹的一切, ...
- 分层图最短路【bzoj2662】[BeiJing wc2012]冻结
分层图最短路[bzoj2662][BeiJing wc2012]冻结 Description "我要成为魔法少女!" "那么,以灵魂为代价,你希望得到什么?" ...
- bzoj 2659: [Beijing wc2012]算不出的算式
2659: [Beijing wc2012]算不出的算式 Time Limit: 3 Sec Memory Limit: 128 MB Description 算不出的算式背景:曾经有一个老掉牙的游 ...
随机推荐
- 凸包入门(Graham扫描法)(A - Wall POJ - 1113)
题目链接:https://cn.vjudge.net/contest/276359#problem/A 题目大意:有一个国王,要在自己的城堡周围建立围墙,要求围墙能把城堡全部围起来,并且围墙距离城堡的 ...
- UNIX环境高级编程 第16章 网络IPC:套接字
上一章(15章)中介绍了UNIX系统所提供的多种经典进程间通信机制(IPC):管道PIPE.命名管道FIFO.消息队列Message Queue.信号量Semaphore.共享内存Shared Mem ...
- 【内核】几个重要的linux内核文件【转】
转自:http://www.cnblogs.com/lcw/p/3159394.html Preface 当用户编译一个linux内核代码后,会产生几个文件:vmlinz.initrd.img, 以及 ...
- aarch64_c2
collectd-5.7.2-5.fc26.aarch64.rpm 2017-06-18 21:17 634K fedora Mirroring Project collectd-amqp-5.7.2 ...
- Small Private Cloud Deployment Solution
项目背景 为用户提供可访问的桌面虚拟机,方便软件研发人员日常办公,软件开发,编译等工作.主要操作包括Visor制图.程序开发测试以及使用office软件办公. 目前阶段需要支持100台虚拟机(4VCP ...
- Python之 context manager
在context manager中,必须要介绍两个概念: with as... , 和 enter , exit. 下文将先介绍with语句,然后介绍 __enter__和exit, 最后介绍cont ...
- django Rest Framework----GenericAPIView 通用视图 GenericAPIView源码分析
一.GenericAPIView GenericAPIView扩展了APIView,为标准列表和详细视图添加了常见的行为. 提供的每个具体通用视图都是一个GenericAPIView或多个mixin类 ...
- vue总结 04过渡--进入/离开 列表过渡
进入/离开 & 列表过渡 概述 Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果.包括以下工具: 在 CSS 过渡和动画中自动应用 class 可以配合使用第三方 CS ...
- acm专题---KMP模板
KMP的子串长n,模式串长m,复杂度o(m+n),朴素做法的复杂度o((n-m+1)*m) 觉得大话数据结果上面这个讲得特别好 改进版本的KMP leetcode 28. Implement strS ...
- java基础79 会话管理(Cookie技术、Session技术)
1.概念 会话管理:管理浏览器和服务器之间会话过程中产生的会话数据. Cookie技术:会话数据保存到浏览器客户端.[存 编号/标记(id)] Session技术:会话技术会保存到 ...