#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;
}