题意:一个洞里有n种宝贝,每种宝藏有各自的价值和体积,XHD口袋的容量为v,问他最多能带走多少价值的宝贝(宝贝可以分割)。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2111
——>>简单贪心,排下序,从价值高的往低的取就好。(注意题目说的宝贝体积是指这种宝贝的总体积,而单价则是体积为1单位时的价值)
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 100 + 10;
struct node
{
int p;
int m;
bool operator < (const node& e) const
{
return p > e.p;
}
};
int main()
{
int v, n, i;
while(scanf("%d", &v))
{
if(!v) return 0;
scanf("%d", &n);
node a[maxn];
for(i = 0; i < n; i++)
scanf("%d%d", &a[i].p, &a[i].m);
sort(a, a+n);
int val = 0;
for(i = 0; i < n; i++)
{
if(v > 0 && a[i].m > 0)
{
if(v > a[i].m)
{
v -= a[i].m;
val += a[i].p * a[i].m;
continue;
}
else
{
val += a[i].p * v;
break;
}
}
}
printf("%d\n", val);
}
return 0;
}