您的位置:首页 > 其它

POJ 2229 DP

2016-05-15 19:52 337 查看

题意:给你个数,让你把它拆成2的幂的和,问有几种拆分方案。
思路:仔细想一想,就是个递推。

  1. 如果是奇数,那么它的方案数和它减一这个数的方案数是一样的。因为1不能拆成除1以外的2的幂之和。(呃说的不太清楚,意会意会(⊙﹏⊙)b)。【举个例子:100的方案数 和101的方案数是一样的】
  2. 如果是偶数,那么它的方案数等于它减一这个数的方案数与它除以二这个数的方案数之和。【举个例子:6的方案数=3的方案数+5的方案数】

也可以先手算几个数找找规律,用不完全归纳。

// by Sirius_Ren
#include <cstdio>
using namespace std;
int f[1000001],n;
int main(){
scanf("%d",&n);
f[1]=1;f[2]=2;
for(int i=3;i<=n;i++)
if(i&1)f[i]=f[i-1];
else f[i]=(f[i-1]+f[i/2])%1000000000;
printf("%d",f
);
}

代码很短,只有10行。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: