#include #include #include using namespace std;

struct Coin { int weight; int value; };

bool compare(Coin c1, Coin c2) { double ratio1 = (double)c1.value / c1.weight; double ratio2 = (double)c2.value / c2.weight; return ratio1 > ratio2; }

double findMaxValue(vector& coins, int totalWeight) { sort(coins.begin(), coins.end(), compare);

double maxValue = 0.0;
for (int i = 0; i < coins.size(); i++) {
    if (totalWeight >= coins[i].weight) {
        maxValue += coins[i].value;
        totalWeight -= coins[i].weight;
    } else {
        maxValue += (double)totalWeight / coins[i].weight * coins[i].value;
        break;
    }
}

return maxValue;

}

int main() { int N, T; cin >> N >> T;

vector<Coin> coins(N);
for (int i = 0; i < N; i++) {
    cin >> coins[i].weight >> coins[i].value;
}

double maxValue = findMaxValue(coins, T);
printf("%.2f\n", maxValue);

return 0;
C++题目描述最厉害的加勒比海盗杰克船长驾驶着他的黑珍珠号海盗船找到了一个装满宝藏的藏宝洞。藏宝洞里面有 NN≤100 堆金币第 i堆金币的总重量和总价值分别是 mivi1≤mivi≤100。黑珍珠号的承重量为 TT≤1000并不一定有办法将全部的金币都带走。他想带走尽可能多价值的金币。所有金币都可以随意分割分割完的金币重量价值比也就是单位价值不变。请问杰克船长最多可以拿走多少价值的金币?输入描述

原文地址: https://www.cveoy.top/t/topic/h4jr 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录