题意:一个洞里有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;
}