把它转化为有限硬币的模型 只有3钟情况,遍历到sum就ok http://acm.hdu.edu.cn/showproblem.php?pid=1085 #include<stdio.h> #include<string> int c1[10000],c2[10000]; int num[3]={1,2,5},m[3]; int main() { int a,b,c; while(scanf("%d%d%d",&a,&b,&c) &&(a+b+c)) { int i,j,k; int sum=a+2*b+5*c; m[0]=a,m[1]=b,m[2]=c; memset(c1,0,sizeof(c1)); memset(c2,0,sizeof(c2)); c1[0]=1; for(i=0;i<3;i++) { for(j=0;j<=sum;j++) if(c1[j]){//加判断缩时间 for( k=0; j+k<=sum && k<=m[i]*num[i] ; k+=num[i] ) c2[j+k]+=c1[j];} for(j=0;j<=sum;j++) { c1[j]=c2[j];//c2只是中间容器 c2[j]=0; } } for(i=0;i<=sum;i++) if(!c1[i]) //把pintf放进来竟然WA?!求解!!! break; printf("%d/n",i); } return 0; }