您的位置:首页 > 其它

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

2015-09-23 00:06 316 查看

有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[10010], c2[10010] ;
int w[4] = {0 , 1 , 2 , 5};
int num[5];

int main()
{
//freopen("in.txt","r",stdin) ;
int n ;
while(scanf("%d %d %d", &num[1], &num[2], &num[3])!= EOF )
{
if (num[1] == 0 && num[2] == 0 && num[3] == 0)
break ;
int Max = num[1]*w[1]+num[2]*w[2]+num[3]*w[3];

memset(c1, 0, sizeof(c1));
memset(c2, 0, sizeof(c2));
int i , j , k ;
for(i=0; i<=w[1]*num[1]; i+=w[1])
c1[i] = 1;
int len = w[1]*num[1];
for(i=2; i<=3; ++i)
{
for(j=0; j<=len; ++j)
for(k=0; k<=w[i]*num[i]; k+=w[i])
{
c2[k+j] += c1[j];
}
len += w[i]*num[i];
for(j=0; j<=len; ++j)
{
c1[j] = c2[j];
c2[j] = 0;
}
}
for(i=0; i<=Max; ++i)
if(c1[i] == 0)
{
printf("%d\n", i);
break;
}
if(i == Max+1)
printf("%d\n", i);
}
return 0;
}
View Code

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: