UESTC 菲波拉契数制
来源:互联网 发布:php 获取数组某个元素 编辑:程序博客网 时间:2024/06/07 00:33
一维的01背包
#include <iostream>#include <cstring>#include <string>#include <cstdio>#include <cmath>#include <ctime>#include <algorithm>#include <queue>#include <map>#define FOP freopen("in","r",stdin)#define inf 0x3f3f3f3f#define ll __int64#define eps 1e-8using namespace std;const int N = 100010;int dp[N];int fib[50];int cnt;void Init(){ int tmp; cnt = 0; memset( fib , 0 , sizeof fib ); memset( dp , 0 , sizeof dp ); fib[cnt++] = 1; fib[cnt++] = 2; tmp = 3; while( tmp < N ) { fib[cnt++] = tmp; tmp = fib[cnt-1] + fib[cnt-2]; }}void Pack(){ int i,j; dp[0] = 1; for( i = 0 ; i < cnt ; i++ ) { for( j = N-1 ; j >= fib[i] ; j-- ) { dp[j] += dp[j-fib[i]]; } }}int main(){ int T,n; Init(); Pack(); scanf( "%d" , &T ); while( T-- ) { scanf( "%d" , &n ); printf( "%d\n" , dp[n] ); } return 0;}
dp[0] = 1这一步很妙,有了这一步可以简单的初始化dp数组所有元素为0,不用考虑两个加数是否都是fib数
原因如下,因为枚举的是fib数组,所以其中一个数肯定是fib数,而另一个数是不是fib数都无关紧要,我们只关心这个j-fib[i]拆成fib数一共有几种表达方法
0 0
- UESTC 菲波拉契数制
- uestc1133菲波拉契数制
- 数制
- 数制
- uestc1139菲波拉契数制升级版
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- C语言基础——笔记整理2
- python 视觉:基本的图像操作和处理
- Forstner算法的Matlab代码
- iterator的顶层const与底层const
- CodeForces 534C Polycarpus' Dice 【数学】
- UESTC 菲波拉契数制
- 编程之美---求首尾相连数组子数组之和的最大值
- Harris算法的Matlab代码
- ThinkPHP 实例化模型
- 排序算法的实现
- 类和对象
- 卓越的教练是如何训练高手的?
- SUSAN算法的matlab代码
- BZOJ 3675: [Apio2014]序列分割