hdu 1085 有num1个 1 ,num2个 2 ,num3个 5 (母函数)

时间:2025-03-14 11:05:43

有num1个 1 ,num2个 2 ,num3个 5
问它们不能组成的最小正整数是谁

样例的母函数 (1+X)(1+X2)(1+X5+X10+X15)
展开后 X4的系数为0

Sample Input
1 1 3
0 0 0

Sample Output
4

 # include <iostream>
# include <cstdio>
# include <cstring>
# include <algorithm>
# include <string>
# include <cmath>
# include <queue>
# include <list>
# define LL long long
using namespace std ; int c1[], c2[] ;
int w[] = { , , , };
int num[]; int main()
{
//freopen("in.txt","r",stdin) ;
int n ;
while(scanf("%d %d %d", &num[], &num[], &num[])!= EOF )
{
if (num[] == && num[] == && num[] == )
break ;
int Max = num[]*w[]+num[]*w[]+num[]*w[]; memset(c1, , sizeof(c1));
memset(c2, , sizeof(c2));
int i , j , k ;
for(i=; i<=w[]*num[]; i+=w[])
c1[i] = ;
int len = w[]*num[];
for(i=; i<=; ++i)
{
for(j=; j<=len; ++j)
for(k=; k<=w[i]*num[i]; k+=w[i])
{
c2[k+j] += c1[j];
}
len += w[i]*num[i];
for(j=; j<=len; ++j)
{
c1[j] = c2[j];
c2[j] = ;
}
}
for(i=; i<=Max; ++i)
if(c1[i] == )
{
printf("%d\n", i);
break;
}
if(i == Max+)
printf("%d\n", i);
}
return ;
}