背包问题
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
3
-
描述
- 现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1<=v,w<=10);如果给你一个背包它能容纳的重量为m(10<=m<=20),你所要做的就是把物品装到背包里,使背包里的物品的价值总和最大。
#include<iostream>
#include<algorithm>
using namespace std;
struct wp
{
int value;
int weight;
};
int cmp(wp a,wp b)
{
return a.value>b.value;
}
int main()
{
wp a[11];
int T,i,n,m,sum;
cin>>T;
while(T--)
{
sum=0;
cin>>n>>m;
for(i=0;i<n;i++)
cin>>a[i].value>>a[i].weight;
sort(a,a+n,cmp);
for(i=0;i<n;i++)
{
if(a[i].weight<=m)
{
sum+=a[i].value*a[i].weight;
m-=a[i].weight;
}
else
{
sum+=m*a[i].value;
break;
}
}
cout<<sum<<endl;
}
return 0;
}