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
题解:当n为奇数时,dp[n] = dp[n-1],因为一定包含一个1,所以dp[n-1]的每一种再加1都一一对应着dp[n];当n为偶数时,要么至少含2个1,或者不含1,不含1时,方法数就是取dp[n/2]的每一种物品乘以2价值的物品。所以dp[n] = dp[n-1] + dp[n/2]。
#include<stdio.h>
#include<string.h>
#include<string.h>
#include<algorithm>
using namespace std;
int n;
int s[1000010];
int main()
{
while(~scanf("%d",&n))
{
s[0]=0;
s[1]=1;
s[2]=2;
for(int i=3;i<=n;i++)
{
if(i%2==1)
s[i]=s[i-1];
else
s[i]=(s[i-1]+s[i/2])%1000000000;
}
printf("%d\n",s[n]);
}
}