题意://求把一个整数分解为2的幂的和共有几种方案 。
规律:若数字为奇数,则情况数等于它前面的那个偶数的情况数,若为偶数,则等于它之前两位的情况数加上它除以2之后的情况数。
AC:
#include <iostream>
#include <iomanip>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cmath>
using namespace std;
long long dp[1000005];
int main()
{
int n;
dp[1]=1;
dp[2]=2;
for(int i=3;i<=1000000;i++) //打表
{
if(i%2==0)
{
dp[i]=dp[i-2]+dp[i/2];
}
else
dp[i]=dp[i-1];
dp[i]%=1000000000; //题目要求输出后9位
}
while(cin>>n)
{
cout<<dp[n]<<endl;
}
return 0;
}