题目传送门:点击打开链接
这道题是母函数的一个变形,首先先确定最大值是 num1*1+num2*2+num5*5,numi代表i 的个数然后再套一下模版就可以了
#include <iostream>
#include <cstring>
using namespace std;
int c1[10000],c2[10000];
int data[4],ans;
int f[]={0,1,2,5};
void solve()
{
for(int i=0;i<=data[1];++i)
c1[i]=1,c2[i]=0;
int cnt=2;
int num=data[1]+2*data[2]+5*data[3];
for(;cnt<=3;++cnt)
{
int i=f[cnt];
for(int j=0;j<=num;++j)
{
if(c1[j])
for(int k=0;k<=i*data[cnt]&&k+j<=num;k+=i)
c2[k+j]+=c1[j];
}
for(int j=0;j<=num;++j)
c1[j]=c2[j],c2[j]=0;
}
for(int i=1;;++i)
if(!c1[i])
{
cout<<i<<endl;
break;
}
}
int main(int argc, const char * argv[])
{
while(cin>>data[1])
{
memset(c1,0,sizeof(c1));
ans=data[1];
for(int i=2;i<4;++i)
{
cin>>data[i];
ans+=data[i];
}
if(!ans)
break;
solve();
}
return 0;
}