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 }

 

你可能感兴趣的:(HDU)