【POJ】2229 Sumsets(递推)
Sumsets
Time Limit: 2000MS | Memory Limit: 200000K | |
Total Submissions: 20315 | Accepted: 7930 |
Description
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).
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
------------------------------------------------------------------------------------------------
分析:按照背包递推即可。
#include <cstdio> #include <algorithm> using namespace std; int w[25],dp[1000005]; int main() { int a=1,n; scanf("%d",&n); for(int i=0;i<=25;i++) { w[i]=a; a*=2; } dp[0]=1; for(int i=0;i<=25;i++) for(int j=w[i];j<=1000000;j++) { dp[j]+=dp[j-w[i]]; dp[j]%=1000000000; } printf("%d",dp[n]%1000000000); return 0; }