背包问题 noj106

#include<iostream>
#include<algorithm>
using namespace std;

typedef struct Value{
	int v,w;  //v是价值 w是重量
}Value;

bool cmp(Value a,Value b)  //按物品的价值从大到小排序
{
	return a.v>b.v||(a.v==b.w && a.w>b.w);
}

int main()
{
	int n,m,s,i,V;
	Value a[10];
	cin>>n;
	while(n--)
	{
		V=0;
		cin>>s>>m;
		for(i=0;i<s;i++)
			cin>>a[i].v>>a[i].w;
		sort(a,a+s,cmp);
	//	for(i=0;i<s;i++)
		//	cout<<a[i].v<<" "<<a[i].w<<endl;
		for(i=0;i<s && m!=0;i++)
		{
			m-=a[i].w;
			if(m>=0)
				V+=a[i].v * a[i].w;
			else
			{
				V+=a[i].v * (a[i].w+m);
				break;
			}
		}
		cout<<V<<endl;
	}
	return 0;
}
原文地址:https://www.cnblogs.com/yaling/p/2956340.html