题意: 给A个1元,B个2元,C个5元,问最小的不能拼出的钱是多少
考虑生成函数(G(x)=(1+x+x^2+...+x^A)(1+x^2+x^4+...+x^{2B})(1+x^5+x^10+...+x^{5C}))
最小的系数为0的项,其指数就是答案
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 505;
int a[4];
int b[4]={0,1,2,5};
long long f[4][8005];
void solve(){
memset(f,0,sizeof(f));
int up=a[1]+2*a[2]+5*a[3];
f[0][0]=1;
for(int i=1;i<=3;i++){
for(int j=0;j<=up;j++){
for(int k=0;k<=a[i]&&j+k*b[i]<=up;k++){
f[i][j+k*b[i]]+=f[i-1][j];
}
}
}
for(int i=0;;i++){
if(f[3][i]) continue;
cout<<i<<endl;
return;
}
}
int main(){
while(~scanf("%d%d%d",a+1,a+2,a+3)){
if(a[1]==0&&a[2]==0&&a[3]==0) return 0;
solve();
}
}