poj之旅——2229

来源:互联网 发布:中小企业进销存软件 编辑:程序博客网 时间:2024/04/28 17:31

题目描述:将一个数N分解为2的幂之和共有几种分法?

题解:定义dp[i]为i的分解方案数。dp[0] = 2 ^ 0 = 1,递推到 N 。若i为偶数,则dp[i] = dp[i / 2] + dp[i – 1] ,否则dp[i] = dp[i – 1] 

参考程序:

#include<cstdio>#define maxn 1000010int f[maxn];int main(){int n;scanf("%d",&n);f[0]=1;for (int i=1;i<=n;i++)f[i]=f[i-1]+(1-(i&1))*f[i/2],    f[i] %= 1000000000;printf("%d",f[n]);return 0;}


0 0
原创粉丝点击