相信大家都学过01背包、完全背包吧....
可惜....在这里是多重背包!!!!!
/***
首先我们分类一下qwq
这是一个多重背包问题qwq
求最少硬币个数,所以得用min,不是max哦~
上代码!!!(废话)
***/
#include<bits/stdc++.h> using namespace std; int t,m,a,b,c; int q[4],s[4]; int f[105]; //j表示背包容量 int main(){ cin>>t;//有几组数据呢??? q[1]=10;q[2]=5;q[3]=1;//分别代表10元,5元,1元$$$$$$钱好多呀\(^o^)/~ while(t--){ cin>>m>>s[3]>>s[2]>>s[1];//输入巧克力价格、钱币持有数量 for(int i=1;i<=m;i++) { f[i]=101;//默认101 } for(int i=1;i<=3;i++){//循环....没什么好稀奇的 for(int j=m;j>=0;j--)//循环....没什么好稀奇的 for(int k=0;k<=s[i]&&k*q[i]<=j;k++)//循环....没什么好稀奇的 f[j]=min(f[j],f[j-k*q[i]]+k);//啊!这是最小!应该没有掉进坑:D } if(f[m]==101) cout<<"-1"<<endl;//若f[m]为初始值....那就别买了:) else cout<<f[m]<<endl; } return 0; }