hdu1085本拉登的难题 母函数版

为了帮助acm学习,一年前注册了博客园。但是一年过去,要么根本在搞别的,acm学习总是一阵一阵的,要么在博客园一直都是看人家的文章,还看得头破血流。一起的同学博客已经是五光十色,我的还是空空如也。能不能坚持,这应该是一个草根acm是否能成为大神的决定性因素。不管以后能否坚持,现在我要执意一水,也算记录不争气的自己的一点汗迹吧。

我做1085的时候,还不知道神马是母函数,等我ac后,发现大神们用的都是“母函数”法,于是顺带学习了一下大神的方法,并了解了一下母函数这种算法。

 1 #include<stdio.h>
 2 #include<string.h>
 3 #define mem0(f) memset(f,0,sizeof(f))
 4 #define M 9000
 5 int s[M];
 6 int main()
 7 {
 8     int a,b,c;
 9     while(~scanf("%d%d%d",&a,&b,&c))
10     {
11         if(!a&&!b&&!c)break;
12         mem0(s);
13         for(int i=0;i<=a;i++)//一定要先进行第一个括号的初始化,以帮助后面的多项式展开
14         {
15             s[i]=1;
16         }
17         for(int i=0;i<=a;i++)
18         {
19             for(int k=0;k<=2*b;k+=2)
20             {
21                 if(s[i])s[i+k]=1;//把可以表示的进行标记
22             }
23         }
24         //printf("%d
",s[1]);
25         for(int i=0;i<=a+2*b;i++)
26         {
27             for(int k=0;k<=5*c;k+=5)
28                {
29                    if(s[i])
30                    {
31                        s[i+k]=1;
32                    }
33                }
34         }
35         //printf("%d
",s[1]);
36         for(int i=0;;i++)
37         {if(s[i]==0){printf("%d
",i);break;}}
38     }
39     return 0;
40 }

这个方法虽然在此题中显得复杂度较高,但是该方法在拼凑一类的题目中使用性还是很广的,不能满足对不对?

初学母函数,这个代码貌似不好,以后再慢慢改进了。

原文地址:https://www.cnblogs.com/plank-george-zzo/p/3203394.html