1 1 3 0 0 0
4
$1 的个数 n1
$2 的个数 n2
$5 的个数n5
故其母函数为:
G(x) = (1 + x+ x^2 + x^3 + ...+ x^n1) (1+x^2 + x^4 +...+ x^(2*n2) )(1+x^5 + x^10 +...+ x^(5*n5) )
/***************************
# 2013-8-26 20:14:55
# Time: 15MS Memory: 228KB
# Author: zyh
# Status: Accepted
***************************/
#include<stdio.h>
int main()
{
int i,j,k,n1,n2,n5,c1[8010],c2[8010]; // 第一次WA数组开小了
while(scanf("%d%d%d",&n1,&n2,&n5),(n1!=0||n2!=0||n5!=0)) //第三次 WA 这里条件写错了
{
int n = n1+2*n2+5*n5; //最高次幂
for(i=0;i<=n;i++){ //初始化第一个括号里的表达式所能代表的$
if(i<=n1) c1[i] = 1;
else c1[i] = 0;
c2[i] = 0;
}
for(j=0;j<=n1;j++) //第一个括号表达式里面项的个数
for(k=0;j+k<=n1+n2*2;k+=2){
c2[j+k] += c1[j];
}
for(j=0;j<=n;j++){
c1[j] = c2[j];
c2[j] = 0;
}
for(j=0;j<=n1+2*n2;j++) //前两个括号表达式 计算过后 里面项的个数
for(k=0;j+k<=n;k+=5){
c2[j+k] += c1[j];
}
for(j=0;j<=n;j++){
c1[j] = c2[j];
c2[j] = 0;
}
for(i=0;i<=n;i++) {
if(c1[i]==0){
printf("%d\n",i);
break;
}
}
if(i==n+1){ //第二次WA 这里没考虑
printf("%d\n",i);
}
}
return 0;
}