• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

plank george

人生豪迈,只不过是重头再来。
  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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  阅读(339)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3