分两种情况
当n为奇数,只能是1+偶数组成
当n为偶数,有两种情况
一种是1+奇数
另一种是奇数*2;
代码如下
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const long long Mod=1000000000;
long long dp[1000005];
int main()
{
dp[0]=1;
for(int i=1;i<=1000000;i++){
if(i&1)
dp[i]=dp[i-1];
else{
dp[i]=(dp[i-1]+dp[i>>1])%Mod;
}
}
int n;
while(~scanf("%d",&n)){
printf("%lld\n",dp[n]);
}
}