poj 2229 Sumsets
来源:互联网 发布:s7200plc密码破解软件 编辑:程序博客网 时间:2024/06/05 08:40
http://poj.org/problem?id=2229
参考了:http://www.cnblogs.com/xinsheng/archive/2013/12/07/3462893.html
方法一:完全背包:
#include <stdio.h>#include <cstring>static int dp[1000001];int main(){ int n; while(scanf("%d",&n)!=EOF){ memset(dp,0,sizeof(dp)); dp[0] =1; for (int i = 0; i < 21; ++i) { int v = 1<<i; for (int j = 1; j<=n; ++j) { if(j-v>=0){ dp[j] = (dp[j-v] + dp[j])%1000000000; } } } printf("%d\n",dp[n]); } }
方法二:递推:
1. 当n为奇数时,f(n) = f(n-1), 由前一个偶数最前面加1得到,
2.当n 为偶数时,
2.1.当第一个数为1时,f(n-1)
2.2.当第一个数不为1是,那么剩下的所有数肯定都是2的倍数,有f(n/2)中可能
所以f(n) = f(n-1) + f(n/2)
#include <stdio.h>static int dp[1000001];int main(){ int n; while(scanf("%d",&n)!=EOF){ dp[1] = 1; for (int i = 2; i <=n; ++i) { if(i&0x1){ dp[i] = dp[i-1]; }else{ dp[i] = (dp[i-1] + dp[i/2])%1000000000; } } printf("%d\n",dp[n]); } }
0 0
- POJ 2229 Sumsets
- poj 2229 Sumsets
- [POJ] 2229 Sumsets
- sumsets poj 2229
- POJ-2229-Sumsets
- poj 2229 Sumsets
- poj 2229 Sumsets DP
- POJ 2229 Sumsets DP
- poj 2229 Sumsets
- poj-2229-Sumsets
- Sumsets poj 2229 c++
- POJ-2229 Sumsets DP
- poj 2229 Sumsets
- poj 2229 Sumsets【DP】
- POJ 2229 Sumsets
- poj 2229 Sumsets
- POJ 2229 Sumsets
- POJ 2229:Sumsets
- [Android开发] RxJava2之路二 - 基本使用方法
- GDB程序调试从初级到高级(四)
- 线性模型(二)-- 线性回归公式推导
- Mac如何安装lein
- 八大排序算法详解——插入排序
- poj 2229 Sumsets
- cacheColorHint,android:listSelector属性
- 2017年2月8日
- Sql注入漏洞问题
- HDOJ(HDU).1241 Oil Deposits(DFS)
- 找出一段数中的第K最大的数:k_Max
- C实例---进制转换(栈实现)
- golang语法学习(二):控制语句,函数,以及错误处理。
- UVa1586 - Molar mass还是画流程图思路清晰