1. 程式人生 > >HDU Ignatius and the Princess III (母函數)

HDU Ignatius and the Princess III (母函數)

tex namespace class .net author def urn rst isp

Problem Description "Well, it seems the first problem is too easy. I will let you know how foolish you are later." feng5166 says.

"The second problem is, given an positive integer N, we define an equation like this:
N=a[1]+a[2]+a[3]+...+a[m];
a[i]>0,1<=m<=N;
My question is how many different equations you can find for a given N.

For example, assume N is 4, we can find:
4 = 4;
4 = 3 + 1;
4 = 2 + 2;
4 = 2 + 1 + 1;
4 = 1 + 1 + 1 + 1;
so the result is 5 when N is 4. Note that "4 = 3 + 1" and "4 = 1 + 3" is the same in this problem. Now, you do it!"

Input The input contains several test cases. Each test case contains a positive integer N(1<=N<=120) which is mentioned above. The input is terminated by the end of file.

Output For each test case, you have to output a line contains an integer P which indicate the different equations you have found.

Sample Input 4 10 20

Sample Output 5 42 627

Author Ignatius.L 技術分享
 1 /*
 2     母函數模板
 3     http://blog.csdn.net/vsooda/article/details/7975485
詳解 4 */ 5 #include<cstdio> 6 #include<iostream> 7 #define MAXN 121 8 9 using namespace std; 10 11 int c1[MAXN]; 12 int c2[MAXN]; 13 14 int n; 15 16 int main() { 17 while(~scanf("%d",&n)) { 18 for(int i=0;i<=n;i++) { 19 c1[i]=1;c2[i]=0; 20 } 21 for(int i=2;i<=n;i++) { 22 for(int j=0;j<=n;j++) 23 for(int k=0;k+j<=n;k+=i) 24 c2[j+k]+=c1[j]; 25 for(int j=0;j<=n;j++) { 26 c1[j]=c2[j]; 27 c2[j]=0; 28 } 29 } 30 printf("%d\n",c1[n]); 31 } 32 return 0; 33 }
代碼

HDU Ignatius and the Princess III (母函數)