HDU1085 Holding Bin-Laden Captive!(母函数)

来源:互联网 发布:淘宝手机拍照软件 编辑:程序博客网 时间:2024/05/20 18:46

Holding Bin-Laden Captive!

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1085

解题思路:

一道母函数的题目,至于有关母函数详细的讲解,请看这个人的博客:http://www.wutianqi.com/?p=596

至于我对母函数的理解吧,个人认为其实还是很简单的,代码里有备注。

AC代码:

#include <iostream>#include <cstdio>#include <cstring>using namespace std;int main(){    int a[] = {1,2,5},num[3];    while(scanf("%d%d%d",&num[0],&num[1],&num[2]),num[0]+num[1]+num[2]){        int k,sum = 0;        int c1[10000],c2[10000],cnt[10000];        for(int i = 0; i < 3; i++)            sum += a[i]*num[i];        memset(c1,0,sizeof(c1));        //初始化        memset(c2,0,sizeof(c2));        //初始化        for(int i = 0; i <= num[0]; i++)            c1[i] = 1;                    //a[0]这枚硬币有多少个,就对c1前多少个进行初始化        for(int i = 1; i < 3; i++){            for(int j = 0; j <= sum; j++)                for(k = 0; k+j<=sum && k<=a[i]*num[i]; k += a[i])       //k值以a[i]的数量进行递增                    c2[k+j] += c1[j];     //进行叠加            for(int j = 0; j <= sum; j++){                c1[j] = c2[j];                c2[j] = 0;                //赋值转换            }        }        for(int i = 1; i <= sum+1; i++)            if(c1[i] == 0){                printf("%d\n",i);                break;            }    }    return 0;}


1 0