这里就是母函数的应用:
(1+x+...+x^num1)(1+x^2+...+x^2num2)(1+x^5+,,,+x^5num3),展开,系数不为0的数都是可以由硬币组合出来的。
代码里面的主要要注意的问题就是初始化问题,因为在母函数里面会需要后面的一大串的数字进行组合而得来的,就是上式子展开
然后要注意数字后面的0的问题,还有首个数字的第一个式子的初始化为1
代码就是、
#include<stdio.h>
#include<string.h>
const int maxn=1000*(1+2+5)+20;
int s1[maxn],s2[maxn];
int main()
{
int n,m,p;
while(scanf("%d%d%d",&n,&m,&p)&&n+m+p>0)
{
for(int i=0;i<=n;i++){
s1[i]=1;
s2[i]=0;
}
for(int j=0;j<=n;j++)
for(int k=0;k<=2*m;k+=2)
s2[j+k]+=s1[j];
for(int i=0;i<=n;i++){
s1[i]=s2[2];
s2[i]=0;
}
for(int j=0;j<=n+2*m;j++)
for(int k=0;k<=5*p;k+=5)
s2[j+k]+=s1[j];
int tag=1;
for(int i=0;;i++)
if(s2[i]==0){
printf("%d\n",i);
tag=0;
break;
}
if(tag)
printf("%d\n",n+m*2+p*5+1);
}
return 0;
}