部分背包问题|洛谷p2240
https://www.luogu.com.cn/problem/P2240
题目分析
贪心+结构体排序
每堆金币包含一个重量和价值的性价比,因为金币可以分割所以只要每次选择性价比最高的金币。
代码
#include<iostream>
#include<algorithm>
using namespace std;
struct bin
{
int m;
int v;
double rate;
}mon[10001];
bool cmp(bin x, bin y)
{
return x.rate > y.rate;
}
int main()
{
int n, t,i;
int sum = 0;
double ans = 0.0;
cin >> n >> t;
for (i = 1; i <= n; i++)
{
cin >> mon[i].m >> mon[i].v;
mon[i].rate = mon[i].v * 1.0 / mon[i].m;
}
sort(mon + 1, mon + 1 + n, cmp);
for (i = 1; i <= n; i++)
{
sum += mon[i].m;
if (sum > t)break;
ans += mon[i].v;
}
sum -= mon[i].m;
ans += mon[i].rate * (t - sum);
printf("%.2lf", ans);
return 0;
}