南陽OJ上的一個揹包問題,注意是單位價值,因爲物品可分割,用貪心法即可解決。題目地址http://acm.nyist.net/JudgeOnline/problem.php?pid=106
#include <iostream>
#include <algorithm>
using namespace std;
struct wup{
int v; //單位價值
int w; //重量
}wp[11];
bool cmp(wup a,wup b)
{
return a.v>b.v;
}
int main()
{
int n;
cin>>n;
int s,m,sum;
while(n--)
{
sum=0;
cin>>s>>m;
int i;
for(i=0;i<s;i++)
{
cin>>wp[i].v>>wp[i].w;
}
sort(wp,wp+s,cmp); //將單位價值高的排在前面
i=0;
while(m>0)
{
if(m>=wp[i].w) {sum+=wp[i].v*wp[i].w; m-=wp[i].w;}
else { sum+=m*wp[i].v; m-=m;}
i++;
}
cout<<sum<<endl;
}
return 0;
}