poj 2229 Sumsets

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).

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 }
原文地址:https://www.cnblogs.com/lueagle/p/6550290.html