您的位置:首页 > 其它

九度 oj 题目1084:整数拆分

2017-01-15 09:38 197 查看
http://ac.jobdu.com/problem.php?pid=1084

照抄了 http://blog.csdn.net/jdplus/article/details/18839343

参考了 http://www.cnblogs.com/yinger/archive/2012/08/17/2644312.html

#include <stdio.h>

int main(){
int a[1000002];
int input;
a[0] = a[1] = 1;
for (int i = 1; i <=500000; ++i) {
a[2*i] = (a[2*i-2] + a[i])%1000000000;
a[2*i+1] = a[2*i];
}

while(scanf("%d",&input) !=EOF ){
printf("%d\n",a[input]);
}
}


这道题,如果找不到递推公式,也可以用完全背包的动态规划来做

#include <stdio.h>
#include <cstring>
static int dp[1000001];

int main(){
int n;
while(scanf("%d",&n)!=EOF){
memset(dp,0,sizeof(dp));
dp[0] =1;
for (int i = 0; i < 21; ++i) {
int v = 1<<i;
for (int j = 1; j<=n; ++j) {
if(j-v>=0){
dp[j] = (dp[j-v] + dp[j])%1000000000;
}
}
}
printf("%d\n",dp
);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: