//Fractional Knapsack
#include <bits/stdc++.h>
using namespace std;
struct Item {
int value, weight;
};
bool cmp(Item a, Item b) {
return (double)a.value/a.weight > (double)b.value/b.weight;
}
int main() {
vector<Item> arr = {{60,10},{100,20},{120,30}};
int W = 50;
sort(arr.begin(), arr.end(), cmp);
double total = 0;
for (int i = 0; i < arr.size(); i++) {
if (W >= arr[i].weight) {
W -= arr[i].weight;
total += arr[i].value;
} else {
total += (double)arr[i].value * W / arr[i].weight;
break;
}
}
cout << "Maximum value: " << total << endl;
}
Ly9GcmFjdGlvbmFsIEtuYXBzYWNrIAojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBJdGVtIHsKICAgIGludCB2YWx1ZSwgd2VpZ2h0Owp9OwoKYm9vbCBjbXAoSXRlbSBhLCBJdGVtIGIpIHsKICAgIHJldHVybiAoZG91YmxlKWEudmFsdWUvYS53ZWlnaHQgPiAoZG91YmxlKWIudmFsdWUvYi53ZWlnaHQ7Cn0KCmludCBtYWluKCkgewogICAgdmVjdG9yPEl0ZW0+IGFyciA9IHt7NjAsMTB9LHsxMDAsMjB9LHsxMjAsMzB9fTsKICAgIGludCBXID0gNTA7CgogICAgc29ydChhcnIuYmVnaW4oKSwgYXJyLmVuZCgpLCBjbXApOwoKICAgIGRvdWJsZSB0b3RhbCA9IDA7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcnIuc2l6ZSgpOyBpKyspIHsKICAgICAgICBpZiAoVyA+PSBhcnJbaV0ud2VpZ2h0KSB7CiAgICAgICAgICAgIFcgLT0gYXJyW2ldLndlaWdodDsKICAgICAgICAgICAgdG90YWwgKz0gYXJyW2ldLnZhbHVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRvdGFsICs9IChkb3VibGUpYXJyW2ldLnZhbHVlICogVyAvIGFycltpXS53ZWlnaHQ7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgICBjb3V0IDw8ICJNYXhpbXVtIHZhbHVlOiAiIDw8IHRvdGFsIDw8IGVuZGw7Cn0=