题目链接:
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; }