嘿嘿
还是一样的题目
#include<iostream> #include<string> #include<algorithm> using namespace std; int p[4]={0,1,2,5}; int c[4],maxn; int num1[10000],num[10000]; void sovle() { memset(num,0,sizeof(num)); memset(num1,0,sizeof(num1)); for(int i=0;i<=c[1];i++) num1[i]=num[i]=1; for(int i=2;i<4;i++) { for(int j=1;j<=c[i];j++) for(int k=0;k<=maxn;k++) { if(num[k]==0) continue; int t=k+j*p[i]; num1[t]+=num[k]; } for(int j=0;j<=maxn;j++) num[j]=num1[j]; } } int main() { while(scanf("%d %d %d",&c[1],&c[2],&c[3])==3) { if(!(c[1]||c[2]||c[3])) break; maxn=c[1]*p[1]+c[2]*p[2]+c[3]*p[3]; if(c[1]==0) { printf("1\n"); continue; } sovle(); int flag=0; for(int i=1;i<=maxn;i++) if(num[i]==0) { printf("%d\n",i); flag=1; break; } if(!flag) printf("%d\n",maxn+1); } return 0; }