poj 2229 Sumsets【DP】
2015-06-05 18:12
453 查看
题目链接:http://poj.org/problem?id=2229
题意:一个数n可以表示成多少种不同的二的幂次的和。
比如7:
1) 1+1+1+1+1+1+1
2) 1+1+1+1+1+2
3) 1+1+1+2+2
4) 1+1+1+4
5) 1+2+2+2
6) 1+2+4
if (i &1) dp[i] = dp[i-1] eles dp[i] = dp[i-2] + dp[i>>1];
代码:
题意:一个数n可以表示成多少种不同的二的幂次的和。
比如7:
1) 1+1+1+1+1+1+1
2) 1+1+1+1+1+2
3) 1+1+1+2+2
4) 1+1+1+4
5) 1+2+2+2
6) 1+2+4
if (i &1) dp[i] = dp[i-1] eles dp[i] = dp[i-2] + dp[i>>1];
代码:
[code]#include <stdio.h> #include <iostream> #include <string.h> #include <algorithm> #include <math.h> #include <ctype.h> #include <time.h> #include <queue> #include <iterator> #include <vector> #include <set> using namespace std; int n; long long dp[1000010]; long long MOD = 1e9; void init() { dp[1] = 1; dp[2] = 2; for (int i = 3; i <= 1000000; i++) { if (i & 1) dp[i] = dp[i-1]; else dp[i] = (dp[i - 1] + dp[i >> 1]) % MOD; } } int main() { init(); while (scanf("%d", &n) != EOF) { printf("%lld\n",dp ); } return 0; }
相关文章推荐
- Android与IOS异同点对比(1)------ 显示
- E430(c) 修改版BIOS刷入攻略
- hdu 2554 N对数的排列问题 【数学】
- Gradle添加so文件
- Linux系统抓包命令tcpdump使用实例
- 关于缓冲区溢出(Buffer Overflow)
- Codeforces Round #301 C (Div. 2) 【dfs】
- BaseExpandableListAdapter的用法
- Android Studio打包.so文件教程
- Linux下启动mysql
- How to install the latest Nvidia drivers on Ubuntu 14.04 Trusty Tahr
- [每日一记]php访问mysql
- 《自己动手写框架6》:量身定制规则引擎,适应多变业务场景
- 在windows上通过ssh远程链接linux服务器[转]
- laravel Blade 模板引擎 命令
- 坚持做一件事从现在开始
- Android IOC框架
- 第十三周项目二--形状类族中的虚函数
- 读stalendp文章的笔记之【Shader实例分析(一)-Wave】
- 编译基本类型错误,要加prefix文件