题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2111
方法:贪心
思路:很明显的贪心+结构体排序,关键是要看清题意,要求的是每体积的单价和体积数,所以相对于一般的这类题目倒是省去了求取性价比的那一步,反而更简单了。但是还是要注意,在写循环主体的时候,我直接写的是根据背包是否被耗尽来判断的,但是实际上背包可以有空余而物品耗尽了,这种情况也是需要考虑的。
难点:是否考虑背包不满的情况
#include<iostream>
#include<algorithm>
using namespace std;
struct stuff
{
int p;
int m;
}pre[110];
bool cmp(stuff a,stuff b)
{
if(a.p!=b.p)
return a.p > b.p;
}
int main()
{
int v,s;
while(cin>>v>>s)
{
if(v == 0)
break;
for(int i = 0;i < s;i++)
{
cin>>pre[i].p>>pre[i].m;
}
sort(pre,pre+s,cmp);
int sum = 0;
int i = 0;
//for(int i = 0;i < s&&v;i++)
while(i < s)
{
if(v >= pre[i].m)
{
v -= pre[i].m;
sum += pre[i].p*pre[i].m;
i++;
//cout<<v<<" ";
}
else
{
sum += v*pre[i].p;
//v = 0;
break;
}
}
cout<<sum<<endl;
}
}