1 /*
   2 
   3 hdu1085
   4 ymc 2008/09/25
   5 题目大意:
   6 面值为1,2,5的硬币分别有num1,num2,num3个,
   7 求由这些硬币不能得到的最小面值。
   8 解题思路:
   9 
  10 */
  11 #include <iostream>
  12 using namespace std;
  13 int n1,n2,n5;
  14 int Init()
  15 {
  16     scanf("%d %d %d",&n1,&n2,&n5);
  17     if(n1+n2+n5==0)
  18         return 0;
  19    return 1;
  20 }
  21 void Solve()
  22 {
  23     if(n1==0)
  24     {
  25         printf("1\n");
  26         return;
  27     }
  28     int n=n1+n2+n2;
  29     if(n<4)
  30     {
  31         printf("%d\n",n+1);
  32         return;
  33     }
  34     printf("%d\n",5*n5+n+1);
  35 }
  36 int main()
  37 {
  38     while(Init())
  39     {
  40         Solve();
  41     }
  42 }

   1 /*
   2 母函数
   3 hdu1028
   4 ymc 2008/09/25
   5 题目大意:
   6 N=a[1]+a[2]+...+a[m],a[i]>0,1<=m<=N。
   7 总共有多少种不同的方程?
   8 4=1+3=3+1是同一种。
   9 解题思路:
  10 f(x)=(1+x+x^2+...)(1+x^4+x^8+...)..(1+x^289+...)
  11 其中x^n次方的系数就是构成总值为n的方程总数。
  12 具体参考 生成函数,也叫母函数。
  13 */
  14 #include <iostream>
  15 using namespace std;
  16 const int N=130;
  17 int a[N];
  18 int b[N];
  19 int c[N];
  20 void Poly()
  21 {
  22     memset(c,0,sizeof(c));
  23     for(int i=0;i<N;i++)
  24         for(int j=0;j<N-i;j++)
  25         {
  26             c[i+j]+=a[i]*b[j];
  27         }
  28 }
  29 void Init()
  30 {
  31     memset(a,0,sizeof(a));
  32     memset(c,0,sizeof(c));
  33     int step;
  34     for(int i=0;i<N;i++)
  35         a[i]=1;
  36     for(int k=2;k<N;k++)
  37     {
  38         memset(b,0,sizeof(b));
  39         for(int i=0;i<N;i=i+k)
  40         {
  41             b[i]=1;
  42         }
  43         Poly();
  44         memcpy(a,c,sizeof(c));
  45     }
  46 }
  47 int main()
  48 {
  49     int n;
  50     Init();
  51     while(scanf("%d",&n),n)
  52     {
  53         printf("%d\n",a[n]);
  54     }
  55 }
ch3n2k.com | Copyright (c) 2004-2020 czk.