题目:hdu1085
题意:给出1元、2元和5元硬币的数量,问你用这些钱币第一个不能组成的钱数是多少
解答:母函数模拟~~~
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define mod 25000001
using namespace std;
const int MAXN = 8010;
int c1[MAXN],c2[MAXN];
int main()
{
int num_1,num_2,num_5;
while(~scanf("%d%d%d",&num_1,&num_2,&num_5))
{
if(num_1 == 0 && num_2 == 0 && num_5 == 0)
break;
for(int i = 0;i <= num_1;i++)
c1[i] = 1;
for(int i = 0;i <= 8001;i++)
c2[i] = 0;
for(int i = 0;i <= num_1;i++)
for(int j = 0;j <= num_2;j++)
c2[j*2+i]++;
for(int i = 0;i <= 8001;i++)
{
c1[i] = c2[i];
c2[i] = 0;
}
for(int i = 0;i <= 8001;i++)
for(int j = 0;j <= num_5;j++)
c2[j*5+i] += c1[i];
for(int i = 1;i <= 8001;i++)
if(c2[i] == 0)
{
printf("%d\n",i);
break;
}
}
return 0;
}