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

有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

 

 1 # include <iostream>
 2 # include <cstdio>
 3 # include <cstring>
 4 # include <algorithm>
 5 # include <string>
 6 # include <cmath>
 7 # include <queue>
 8 # include <list>
 9 # define LL long long
10 using namespace std ;
11 
12 
13 int c1[10010], c2[10010] ;
14 int w[4] = {0 , 1 , 2 , 5};
15 int num[5];
16 
17 int main()
18 {
19     //freopen("in.txt","r",stdin) ;
20     int n ;
21     while(scanf("%d %d %d", &num[1], &num[2], &num[3])!= EOF )
22     {
23         if (num[1] == 0 && num[2] == 0 && num[3] == 0)
24             break ;
25         int Max = num[1]*w[1]+num[2]*w[2]+num[3]*w[3];
26 
27         memset(c1, 0, sizeof(c1));
28         memset(c2, 0, sizeof(c2));
29         int i , j , k ;
30         for(i=0; i<=w[1]*num[1]; i+=w[1])
31             c1[i] = 1;
32         int len = w[1]*num[1];
33         for(i=2; i<=3; ++i)
34         {
35             for(j=0; j<=len; ++j)
36                 for(k=0; k<=w[i]*num[i]; k+=w[i])
37                 {
38                     c2[k+j] += c1[j];
39                 }
40             len += w[i]*num[i];
41             for(j=0; j<=len; ++j)
42             {
43                 c1[j] = c2[j];
44                 c2[j] = 0;
45             }
46         }
47         for(i=0; i<=Max; ++i)
48             if(c1[i] == 0)
49             {
50                 printf("%d\n", i);
51                 break;
52             }
53         if(i == Max+1)
54             printf("%d\n", i);
55     }
56     return 0;
57 }
View Code

 

posted @ 2015-09-23 00:06  __Meng  阅读(233)  评论(0编辑  收藏  举报