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;
}