当前位置: 代码迷 >> 综合 >> hdu - 2111 - Saving HDU
  详细解决方案

hdu - 2111 - Saving HDU

热度:19   发布时间:2024-01-10 13:52:28.0

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


  相关解决方案