牛客网 整数拆分 (动态规划)

题目链接:https://www.nowcoder.com/practice/376537f4609a49d296901db5139639ec?tpId=40&tqId=21339&tPage=1&rp=1&ru=/ta/kaoyan&qru=/ta/kaoyan/question-ranking

题目描述

一个整数总可以拆分为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

 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 }
原文地址:https://www.cnblogs.com/wydxry/p/10713892.html