题目链接
这题也是动态规划的思想
首先一个偶数可以分为,两个1或者2为基数
一个奇数可以分为,它前一个偶数和1
#include<iostream>
#include<cstring>
using namespace std;
const long long int maxn = 1e6 + 10;
const long long int mod = 1e9;
long long int dp[maxn];
int main()
{
long long int n;
memset(dp, 0, sizeof(dp));
cin >> n;
dp[1] = 1;
dp[0] = 1;
for (long long int i = 2; i <= n; i++) {
if (i % 2 == 0) {
dp[i] = dp[i - 2] + dp[i / 2];
}
else {
dp[i] = dp[i - 1];
}
dp[i] %= mod;
}
cout << dp[n];
return 0;
}