hdu1085 Holding Bin-Laden Captive!

/...................................................................................................................................................................................................................................................................................\

题目分析:

               题意:不能用num_1,num_2,num_3这三个数组和成最小的数。

                       即就是求母函数G(x)=(1+x+.....+x^num_1)(1+x^2+....+x^(2*num_2))(1+x^5+....X^(5*num_3))的展开式的 系数为零的指数; 若系数都不为零,则最小数为s+1;

错误分析:

                开始没完全理解题目的意思,开始时把题目的num_1、num_2、num_3输入要求理解为scanf("%d %d %d",&num_1,&num_2,&num_3),num_1&&num_2&&num_3),导致Runtime Error(ACCESS_VIOLATION)好几次,找了好长时间都没找到错误,又从新把代码写了一遍还是没有通过后来找大神看代码才知道,num_1、num_2、num_3 的输入要请是三个数同时为0时,程序不执行,改过之后在提交一次就AC了。


\.................................................................................................................................................................................................................................................................................../

代码:

#include<stdio.h>
#include <iostream>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
#include<list>
#include<vector>
#pragma comment(linker,"/STACK:102400000,102400000")
using namespace std;
#define MAX 80005
int c1[MAX],c2[MAX];

int main()
{
   int i,j,max,num_1,num_2,num_3;
   while(scanf("%d%d%d",&num_1,&num_2,&num_3),num_1||num_2||num_3)
   {
       max=num_1*1+num_2*2+num_3*5;
       for(i=0;i<=max;i++)
       {
           c1[i]=0;
           c2[i]=0;
       }
       for(i=0;i<=num_1;i++)     //为(1+x+.....+x^num_1)的系数赋初时值为1.
       {
           c1[i]=1;
       }
     for(i=0;i<=num_1;i++)      //(1+x+……+x^num_1)(1+x^2+…… x^(2*num_2))的系数;
       {
           for(j=0;j<=num_2*2;j+=2)
           {
               c2[j+i]+=c1[i];
           }
       }
       for(i=0;i<=num_2*2+num_1*1;i++)            //改变范围变为(num_1*1+num_2*2)
       {
           c1[i]=c2[i];
           c2[i]=0;
       }
       for(i=0;i<=num_1*1+num_2*2;i++)      //(1+x+.....+x^num_1)(1+x^2+....+x^(2*num_2))(1+x^5+....X^(5*num_3))的系数;    
       {
           for(j=0;j<=num_3*5;j+=5)
           {
               c2[j+i]+=c1[i];
           }
       }
       for(i=0;i<=max;i++)   //改变范围变为max=num_1*1+num_2*2+num_3*3;
       {
           c1[i]=c2[i];
           c2[i]=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;
}







你可能感兴趣的:(数论,生成函数母函数)