文章

6

粉丝

16

获赞

1

访问

1.3k

头像
喝饮料问题 题解:
P5128
发布于2024年3月26日 19:08
阅读数 320

第一眼还以为是背包问题的dp呢,没想到还是个挺简单的贪心。

我们可以想想,一元可以买每种饮料多少?我们是不是每次要拿钱少,量还大的饮料?

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

int main() {
    int n, x;
    cin >> x >> n;
    while (n != -1 && x != -1) {
        double drink = 0, value = 0, ans = 0;
        vector<pair<double, double>> arr;
        for (int i = 0; i < n; i++) {
            cin >> drink >> value;
            arr.emplace_back(drink / value, value);
        }
        sort(arr.begin(), arr.end(), greater<pair<double, double>>());
        for (auto& p : arr) {
            if (x >= p.second) {
                x -= p.second;
                ans += p.first * p.second;
            }
            else {
                ans += p.first * x;
                break;
            }
        }
        printf("%.3lf\n", ans);
        cin >> x >> n;
    }
  ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发