Sumsets (poj 2229 简单dp)
2015-03-07 16:15
330 查看
Sumsets
Farmer John commanded his cows to search for different sets of numbers that sum to a given number. The cows use only numbers that are an integer power of 2. Here are the possible sets of numbers that sum to 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 Help FJ count all possible representations for a given integer N (1 <= N <= 1,000,000). Input A single line with a single integer, N. Output The number of ways to represent N as the indicated sum. Due to the potential huge size of this number, print only last 9 digits (in base 10 representation). Sample Input 7 Sample Output 6 Source USACO 2005 January Silver |
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <string> #include <map> #include <stack> #include <vector> #include <set> #include <queue> #pragma comment (linker,"/STACK:102400000,102400000") #define maxn 1000010 #define MAXN 2005 #define mod 1000000000 #define INF 0x3f3f3f3f #define pi acos(-1.0) #define eps 1e-6 #define lson rt<<1,l,mid #define rson rt<<1|1,mid+1,r #define FRE(i,a,b) for(i = a; i <= b; i++) #define FRL(i,a,b) for(i = a; i < b; i++) #define mem(t, v) memset ((t) , v, sizeof(t)) #define sf(n) scanf("%d", &n) #define sff(a,b) scanf("%d %d", &a, &b) #define sfff(a,b,c) scanf("%d %d %d", &a, &b, &c) #define pf printf #define DBG pf("Hi\n") typedef long long ll; using namespace std; int dp[maxn]; void solve() { dp[1]=1; dp[2]=2; for (int i=3;i<maxn;i++) { if (i%2) dp[i]=dp[i-1]; //当i为奇数时,i-1必定是偶数,i是在i-1的二进制的最低位加1而来,所以dp[i]=dp[i-1] else dp[i]=(dp[i-2]+dp[i/2])%mod;//当i为偶数时,则可以划分成前面有1组成而后两位必是0的二进制表示和两部分都表示偶数的二进制,即dp[i]=dp[i-2]+dp[i/2]. } } int main() { int i,j,n; solve(); while (~sf(n)) pf("%d\n",dp ); return 0; }
相关文章推荐
- poj2229 简单DP
- POJ-2229-Sumsets -(简单dp)
- POJ 2229 Sumsets (简单DP)
- Sumsets(POJ 2229 DP)
- POJ2229 Sumsets (dp)
- POJ 3616【数状数组求区间最大值 + 简单DP】
- POJ 3356【简单DP】
- POJ 2181简单DP
- poj 2181 Jumping Cows ——简单DP
- POJ 3671 Dining Cows 简单DP
- POJ 3249 拓扑排序+ 简单DP
- 简单概率DP(POJ 2151 Check the difficulty of problems)
- POJ 3671 Dining Cows 简单DP
- [简单DP] POJ 2192 Zipper
- poj 1837 Balance(简单dp)
- POJ1159 Palindrome 简单的DP
- poj 1157 LITTLE SHOP OF FLOWERS 【简单DP】
- poj 3107(简单的树形dp)
- zoj 1074 || poj 1050 To the Max(简单DP)
- poj 1157 LITTLE SHOP OF FLOWERS——简单DP