题意:给出你1元,2元,5元硬币的个数,求出最小的不能组合成的金额.
代码:
#include<bits/stdc++.h>
using namespace std;
int sum1[8010];
int sum2[8010];
int main()
{
int a[3];
int num[3]={1,2,5};
while(~scanf("%d%d%d",&a[0],&a[1],&a[2]))
{
memset(sum1,0,sizeof(sum1));
if(a[0]==0&&a[1]==0&&a[2]==0)
continue;
sum1[0]=1;
int maxx=0;
for(int i=0;i<3;i++){//每个因子循环
maxx+=a[i]*num[i];
memset(sum2,0,sizeof(sum2));
for(int j=0;j<=maxx;j++){//因子内每一个项循环
for(int k=0;k<=num[i]*a[i]&&k+j<=maxx;k+=num[i]){//与另一个式子相乘循环
sum2[k+j]+=sum1[j];
}
}
memcpy(sum1,sum2,sizeof(sum2));
}
int i=0;
while(sum1[i])
i++;
printf("%d\n",i);
}
return 0;
}
本题还有多重背包解法,链接地址为
http://blog.youkuaiyun.com/qq_31674715/article/details/79505815