编辑代码

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct Bean {
    int weight;
    int value;

    Bean(int w, int v) : weight(w), value(v) {}
};

bool compareBeans(const Bean &a, const Bean &b) {
    return (double)a.value / a.weight > (double)b.value / b.weight;
}

double maxBeanValue(vector<Bean> &beans, int capacity) {
    sort(beans.begin(), beans.end(), compareBeans);

    double maxValue = 0.0;
    for (const Bean &bean : beans) {
        if (capacity >= bean.weight) {
            maxValue += bean.value;
            capacity -= bean.weight;
        } else {
            maxValue += (double)capacity / bean.weight * bean.value;
            break;
        }
    }

    return maxValue;
}

int main() {
    vector<Bean> beans = {{15, 300}, {18, 180}, {10, 150}, {9, 270}};
    int capacity = 20;

    cout << "Max value for the bean bag: " << maxBeanValue(beans, capacity) << endl;

    return 0;
}