很裸的贪心:按价值从大到小sort一下,然后枚举当前最大价值最多往包里放多少(更新m),累加起来就是结果
#include#include #include #include #include #include using namespace std;struct point{ int v,w;}p[15];bool cmp(point a,point b){ return a.v>b.v;}int main(){ int n,s,m,i; cin>>n; while(n--) { scanf("%d%d",&s,&m); for(i=0;i 0;++i)//若没有物品或者背包容量为空,跳出循环 { tot+=min(m,p[i].w)*p[i].v; //min很重要 m-=p[i].w; } printf("%d\n",tot); } return 0;}