题意:
给定一个N,只允许使用2的幂次数,问有多少种不同的方案组成N。
题解:
对于n为奇数的时候,dp[n]=dp[n-1],因为一定包含一个1,这个1可以和dp[n-1]的所有情况相加。当n为偶数是,存在两种情况,一种是没有1,一种是两个1,没有1的情况是dp[n/2],存在两个1的情况是dp[n-2]。
LL dp[maxn];
void solve(){
dp[0] = 1;
for(int i = 1;i < maxn;i++){
if(i%2 == 1) dp[i] = dp[i-1];
else dp[i] = (dp[i-2] + dp[i/2]) % Mod;
}
}
int main(){
int n;
solve();
while(scanf("%d",&n) != EOF){
printf("%d\n",dp[n]);
}
return 0;
}