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\n",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\n",s[1]); 36 for(int i=0;;i++) 37 {if(s[i]==0){printf("%d\n",i);break;}} 38 } 39 return 0; 40 }
这个方法虽然在此题中显得复杂度较高,但是该方法在拼凑一类的题目中使用性还是很广的,不能满足对不对?
初学母函数,这个代码貌似不好,以后再慢慢改进了。
posted on 2013-07-21 09:21 plank george 阅读(335) 评论(0) 编辑 收藏 举报