洛谷题单指南-贪心-P2240 【深基12.例1】部分背包问题
原题链接:https://www.luogu.com.cn/problem/P2240
题意解读:金币可以任意分割,贪心模版题。
解题思路:
将金币按照单位价格由大到小排序,优先装单价最高的,最后背包不够装时,对金币进行分割,直到装满背包为止。
100分代码:
#include <bits/stdc++.h>
using namespace std;
struct coin
{
double m, v;
} coins[105];
bool cmp(coin c1, coin c2)
{
return c1.v / c1.m >= c2.v / c2.m;
}
int n, t;
double ans;
int main()
{
cin >> n >> t;
for(int i = 1; i <= n; i++)
{
cin >> coins[i].m >> coins[i].v;
}
sort(coins + 1, coins + n + 1, cmp);
for(int i = 1; i <= n; i++)
{
if(t >= coins[i].m)
{
t -= coins[i].m;
ans += coins[i].v;
}
else
{
ans += t * coins[i].v / coins[i].m;
break;
}
}
printf("%.2lf", ans);
return 0;
}