c9

清华大学--整数拆分

匿名 (未验证) 提交于 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"