本文主要是介绍杭电acm1085.Holding Bin-Laden Captive!(母函数),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
/********************************
题目大意:不可以用num1个1,num2个2,num3个5组合得到的最小数;
题目解析:求(1+x+.....+x^num1)(1+x^2+....+x^(2*num2))(1+x^5+....X^(5*num3))
的系数为零的指数;若系数都不为零,则最小数为sum+1;
错误分析:1.不能确定j的循环次数;2.没有把M数值开到最大,导致ACCESS_VIOLATION (由于指针、数组下标越界造成的)
**************************************/#include<stdio.h>
#include<iostream>
#include<algorithm>
#define M 10000
using namespace std;
int a1[M],a2[M] ,eum[3]={1,2,5};
int main()
{int i,j,k,num1,num2,num3,s,c;while(scanf("%d %d %d",&num1,&num2,&num3),num1||num2||num3){s=num1+num2*2+num3*5;for(i=0;i<=num1;i++)//先为(1+x+.....+x^num1)的系数赋值{a1[i]=1;a2[i]=0;}c=num1;for(i=2;i<=3;++i)//控制前i-1个表达式与第i个表达式的乘积,总共有3的表达式{for(j=0;j<=c;++j)//控制表达i的项数;for(k=0;k+j<=s;k+=eum[i-1])//指数k最大不能超过1,2,5组合总数{a2[j+k]+=a1[j];}for(j=0;j<=s;++j){a1[j]=a2[j];a2[j]=0;}c=num1+2*num2;//j的大小不能大于1,2的组合总数}for(i=0;i<=s;i++){if(a1[i]==0){printf("%d\n",i);break;}}if(i==s+1)printf("%d\n",i);}return 0;
}
这篇关于杭电acm1085.Holding Bin-Laden Captive!(母函数)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!