洛谷题单指南-贪心-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;
}

 

posted @ 2024-02-22 15:55  五月江城  阅读(70)  评论(0编辑  收藏  举报