Sumsets
Time Limit: 2000MS | Memory Limit: 200000K | |
Total Submissions: 18373 | Accepted: 7190 |
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
1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 5 using namespace std; 6 7 const int maxn = 1000010; 8 const int M = 1000000000; 9 10 int dp[maxn]; 11 12 void solve(){ 13 dp[0] = 1; 14 for(int i = 1;i<maxn;++i){ 15 if(i%2){ 16 dp[i] = dp[i-1]; 17 }else{ 18 dp[i] = (dp[i/2]+dp[i-2])%M; 19 } 20 } 21 } 22 23 int main(){ 24 int n; 25 solve(); 26 while(cin>>n){ 27 cout<<dp[n]<<endl; 28 } 29 return 0; 30 }