清华大学--整数拆分

匿名 (未验证) 提交于 2019-12-03 00:21:02

题目描述
一个整数总可以拆分为2的幂的和,例如: 7=1+2+4 7=1+2+2+2 7=1+1+1+4 7=1+1+1+2+2 7=1+1+1+1+1+2 7=1+1+1+1+1+1+1 总共有六种不同的拆分方式。 再比如:4可以拆分成:4 = 4,4 = 1 + 1 + 1 + 1,4 = 2 + 2,4=1+1+2。 用f(n)表示n的不同拆分的种数,例如f(7)=6. 要求编写程序,读入n(不超过1000000),输出f(n)%1000000000。
输入描述:
每组输入包括一个整数:N(1<=N<=1000000)。
输出描述:
对于每组数据,输出f(n)%1000000000。
示例1
输入
7
输出
6

利用动态规划:

#include<stdio.h> int main(){     int dp[1000001],num,i;     dp[0]=0;     dp[1]=1;     dp[2]=2;     for(i=3;i<=1000000;i++){         dp[i]=0;         if(i&1)             dp[i]=(dp[i-1])%1000000000;         else             dp[i]=(dp[i-1]+dp[i/2])%1000000000;     }     while(scanf("%d",&num)!=EOF)         printf("%d\n",dp[num]); }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!