题目:
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
思路:
1:1
2:11 2
3:111 12
4:1111 112 22 4
5:11111 1112 122 14
6:111111 11112 1122 114 222 24
偶数由上一个奇数每种添一个1(所以含1的可能),再加上半数乘二(所有不含1的可能) 111->222 12->24
7:1111111 111112 11122 1114 1222 124
奇数由上一个偶数每种添一个1(奇数一定含1) 1122->11122
AC代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <cmath>
using namespace std;
typedef pair<double,double> PII;
int n,ans[1000005];
int mod=10e8;
int main()
{
scanf("%d",&n);
ans[1]=1;
ans[2]=2;
for(int i=3;i<=n;i++){
if(i%2) ans[i]=ans[i-1]; //奇数
else ans[i]=(ans[i-1]+ans[i/2])%mod; //偶数
}
printf("%d\n",ans[n]);
return 0;
}