hdu 1028 Ignatius and the Princess III

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1028

题目大意:3=1+1+1=1+2=3 ;4=4=1+1+1+1=1+2+1=1+3;所以3有3种加法,4有4种加法,给出一个n,(1<=n<=120) ,计算n有几种加法。

解法:母函数的最简单的一道入门题之一。

说明:今早上突发奇想着想学学母函数,就搜了搜HDU ACM PPT 的母函数一版,把这道题分享给大家。

感想:这道题之前看过,推过公式什么的,没推出来。今天才知道是母函数的算法。算法果然奇妙啊,我得加紧学习算法了。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<algorithm>
 7 #define inf 0x7fffffff
 8 using namespace std;
 9 int main()
10 {
11     int an[222],bn[222];
12     int n;
13     while (cin>>n)
14     {
15         for (int i=0 ;i<=n ;i++) {an[i]=1 ;bn[i]=0 ; }
16         //模拟多项式乘法
17         for (int i=2 ;i<=n ;i++) // 从第二个多项式开始枚举
18         {
19             for (int j=0 ;j<=n ;j++)//枚举第一个多项式的系数
20             {
21                 for (int k=0 ;k+j<=n ;k+=i) //枚举第i个多项式各项系数
22                 {
23                     bn[j+k] += an[j];
24                 }
25             }
26             for (int j=0 ;j<=n ;j++)
27             {
28                 an[j]=bn[j];
29                 bn[j]=0;
30             }
31         }
32         printf("%d\n",an[n]);
33     }
34     return 0;
35 }

 

posted @ 2014-03-22 10:03  huangxf  阅读(176)  评论(0编辑  收藏  举报