题意:
给定一个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;
}
本文探讨了一道关于利用2的幂次组合成特定数值N的问题,并提供了一个动态规划解决方案。通过递推公式,文章详细说明了如何根据不同情况(奇数或偶数)更新状态,从而高效求解。
3214

被折叠的 条评论
为什么被折叠?



