#include<bits/stdc++.h>
using namespace std;
struct item{
int weight;
int profit;
float u_profit;
};
bool cmp(item a, item b){
return a.u_profit > b.u_profit;
}
double profit = 0;
double fractional_knapsack(item items[], int n, int knapsack){
sort(items, items+n, cmp);
for(int i = 0; i < n; i++){
if(items[i].weight <= knapsack){
knapsack -= items[i].weight;
profit += items[i].profit;
}
else{
profit += (items[i].u_profit * knapsack);
knapsack = 0;
break;
}
}
return profit;
}
int main(){
int knapsack = 11;
int weight[] = {7, 5, 4, 3, 2};
int profit_arr[] = {15, 10, 20, 14, 12};
int n = sizeof(weight) / sizeof(weight[0]);
struct item items[5];
for(int i = 0; i < n; i++){
items[i].weight = weight[i];
items[i].profit = profit_arr[i];
items[i].u_profit = (float)items[i].profit / items[i].weight;
}
fractional_knapsack(items, n, knapsack);
cout << profit << endl;
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBpdGVtewogICAgaW50IHdlaWdodDsKICAgIGludCBwcm9maXQ7CiAgICBmbG9hdCB1X3Byb2ZpdDsKfTsKCmJvb2wgY21wKGl0ZW0gYSwgaXRlbSBiKXsKICAgIHJldHVybiBhLnVfcHJvZml0ID4gYi51X3Byb2ZpdDsKfQoKZG91YmxlIHByb2ZpdCA9IDA7Cgpkb3VibGUgZnJhY3Rpb25hbF9rbmFwc2FjayhpdGVtIGl0ZW1zW10sIGludCBuLCBpbnQga25hcHNhY2spewoKICAgIHNvcnQoaXRlbXMsIGl0ZW1zK24sIGNtcCk7CgoKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspewoKICAgICAgICBpZihpdGVtc1tpXS53ZWlnaHQgPD0ga25hcHNhY2spewogICAgICAgICAgICBrbmFwc2FjayAtPSBpdGVtc1tpXS53ZWlnaHQ7CiAgICAgICAgICAgIHByb2ZpdCArPSBpdGVtc1tpXS5wcm9maXQ7CiAgICAgICAgfQoKICAgICAgICBlbHNlewoKICAgICAgICAgICAgcHJvZml0ICs9IChpdGVtc1tpXS51X3Byb2ZpdCAqIGtuYXBzYWNrKTsKICAgICAgICAgICAga25hcHNhY2sgPSAwOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gcHJvZml0Owp9CgoKaW50IG1haW4oKXsKICAgIGludCBrbmFwc2FjayA9IDExOwogICAgaW50IHdlaWdodFtdID0gezcsIDUsIDQsIDMsIDJ9OwogICAgaW50IHByb2ZpdF9hcnJbXSA9IHsxNSwgMTAsIDIwLCAxNCwgMTJ9OwogICAgaW50IG4gPSBzaXplb2Yod2VpZ2h0KSAvIHNpemVvZih3ZWlnaHRbMF0pOwogICAgc3RydWN0IGl0ZW0gaXRlbXNbNV07CgogICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKyl7CiAgICAgICAgaXRlbXNbaV0ud2VpZ2h0ID0gd2VpZ2h0W2ldOwogICAgICAgIGl0ZW1zW2ldLnByb2ZpdCA9IHByb2ZpdF9hcnJbaV07CgoKICAgICAgICBpdGVtc1tpXS51X3Byb2ZpdCA9IChmbG9hdClpdGVtc1tpXS5wcm9maXQgLyBpdGVtc1tpXS53ZWlnaHQ7CiAgICB9CgogICAgZnJhY3Rpb25hbF9rbmFwc2FjayhpdGVtcywgbiwga25hcHNhY2spOwoKCiAgICBjb3V0IDw8IHByb2ZpdCA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9Cg==