牛客网 整数拆分 (动态规划)
题目描述
一个整数总可以拆分为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
输出
复制6
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 using namespace std; 5 const int N=1e6+5; 6 const int Mod=1e9; 7 int a[N]; 8 void init() 9 { 10 a[0]=0,a[1]=1; 11 for(int i=2;i<N;i++){ 12 if(i%2==1) a[i]=a[i-1]; 13 else a[i]=(a[i-1]+a[i/2])%Mod; 14 } 15 } 16 int n; 17 int main() 18 { 19 init(); 20 while(cin>>n){ 21 cout<<a[n]<<endl; 22 } 23 return 0; 24 }