题目的意思是输入N,有多少种由2的整数幂相加的情况。
下面的是AC 的代码:
#include <iostream>
#include <cstring>
using namespace std;
int dp[1000002];
int a[21];
const int mod = 1000000000;
int main()
{
int i;
memset(dp, 0, sizeof(dp));
dp[0] = 0; dp[1] = 1; dp[2] = 2;
for(i = 3; i < 1000002; i++)
{
if(i % 2) //奇数的情况,直接由i-1再加1过来的
{
dp[i] = dp[i - 1];
}
else //偶数的情况,由i-1的情况和i / 2的情况相加
{
dp[i] = dp[i - 1] + dp[i / 2];
}
dp[i] %= mod;
}
int n;
cin >> n;
cout << dp[n] << endl;
return 0;
}