#include<bits/stdc++.h>
using namespace std;
struct item{
int weight;
int profit;
float u_profit;
};
// Comparator for sorting items by unit profit in descending order
bool cmp(item a, item b){
return a.u_profit > b.u_profit;
}
// Global variable 'profit' is slightly unconventional but works with the current setup
double profit = 0;
double fractional_knapsack(item items[], int n, int knapsack){
// 1. Sort items based on the unit profit (greedy choice)
sort(items, items+n, cmp);
// 2. Iterate and fill the knapsack
for(int i = 0; i < n; i++){
// If the entire item fits
if(items[i].weight <= knapsack){
knapsack -= items[i].weight;
profit += items[i].profit;
}
// If only a fraction of the item fits
else{
// Add the profit of the fractional part (unit_profit * remaining_capacity)
profit += (items[i].u_profit * knapsack);
knapsack = 0; // Knapsack is now full
break; // Stop the process
}
}
return profit;
}
int main(){
int knapsack = 11;
int weight[] = {7, 5, 4, 3, 2};
int profit_arr[] = {15, 10, 20, 14, 12}; // Renamed to avoid confusion with global 'profit'
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];
// FIX: Cast 'profit' to (float) to force floating-point division
items[i].u_profit = (float)items[i].profit / items[i].weight;
}
fractional_knapsack(items, n, knapsack);
// Output the final computed profit
cout << profit << endl;
return 0; // Added return 0 for good practice
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBpdGVtewogICAgaW50IHdlaWdodDsKICAgIGludCBwcm9maXQ7CiAgICBmbG9hdCB1X3Byb2ZpdDsKfTsKCi8vIENvbXBhcmF0b3IgZm9yIHNvcnRpbmcgaXRlbXMgYnkgdW5pdCBwcm9maXQgaW4gZGVzY2VuZGluZyBvcmRlcgpib29sIGNtcChpdGVtIGEsIGl0ZW0gYil7CiAgICByZXR1cm4gYS51X3Byb2ZpdCA+IGIudV9wcm9maXQ7Cn0KCi8vIEdsb2JhbCB2YXJpYWJsZSAncHJvZml0JyBpcyBzbGlnaHRseSB1bmNvbnZlbnRpb25hbCBidXQgd29ya3Mgd2l0aCB0aGUgY3VycmVudCBzZXR1cApkb3VibGUgcHJvZml0ID0gMDsgCgpkb3VibGUgZnJhY3Rpb25hbF9rbmFwc2FjayhpdGVtIGl0ZW1zW10sIGludCBuLCBpbnQga25hcHNhY2spewogICAgLy8gMS4gU29ydCBpdGVtcyBiYXNlZCBvbiB0aGUgdW5pdCBwcm9maXQgKGdyZWVkeSBjaG9pY2UpCiAgICBzb3J0KGl0ZW1zLCBpdGVtcytuLCBjbXApOwogICAgCiAgICAvLyAyLiBJdGVyYXRlIGFuZCBmaWxsIHRoZSBrbmFwc2FjawogICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKyl7CiAgICAgICAgLy8gSWYgdGhlIGVudGlyZSBpdGVtIGZpdHMKICAgICAgICBpZihpdGVtc1tpXS53ZWlnaHQgPD0ga25hcHNhY2spewogICAgICAgICAgICBrbmFwc2FjayAtPSBpdGVtc1tpXS53ZWlnaHQ7CiAgICAgICAgICAgIHByb2ZpdCArPSBpdGVtc1tpXS5wcm9maXQ7CiAgICAgICAgfQogICAgICAgIC8vIElmIG9ubHkgYSBmcmFjdGlvbiBvZiB0aGUgaXRlbSBmaXRzCiAgICAgICAgZWxzZXsKICAgICAgICAgICAgLy8gQWRkIHRoZSBwcm9maXQgb2YgdGhlIGZyYWN0aW9uYWwgcGFydCAodW5pdF9wcm9maXQgKiByZW1haW5pbmdfY2FwYWNpdHkpCiAgICAgICAgICAgIHByb2ZpdCArPSAoaXRlbXNbaV0udV9wcm9maXQgKiBrbmFwc2Fjayk7CiAgICAgICAgICAgIGtuYXBzYWNrID0gMDsgLy8gS25hcHNhY2sgaXMgbm93IGZ1bGwKICAgICAgICAgICAgYnJlYWs7ICAgICAgIC8vIFN0b3AgdGhlIHByb2Nlc3MKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gcHJvZml0Owp9CgoKaW50IG1haW4oKXsKICAgIGludCBrbmFwc2FjayA9IDExOwogICAgaW50IHdlaWdodFtdID0gezcsIDUsIDQsIDMsIDJ9OwogICAgaW50IHByb2ZpdF9hcnJbXSA9IHsxNSwgMTAsIDIwLCAxNCwgMTJ9OyAvLyBSZW5hbWVkIHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIGdsb2JhbCAncHJvZml0JwogICAgaW50IG4gPSBzaXplb2Yod2VpZ2h0KSAvIHNpemVvZih3ZWlnaHRbMF0pOwogICAgc3RydWN0IGl0ZW0gaXRlbXNbNV07CgogICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKyl7CiAgICAgICAgaXRlbXNbaV0ud2VpZ2h0ID0gd2VpZ2h0W2ldOwogICAgICAgIGl0ZW1zW2ldLnByb2ZpdCA9IHByb2ZpdF9hcnJbaV07CiAgICAgICAgCiAgICAgICAgLy8gRklYOiBDYXN0ICdwcm9maXQnIHRvIChmbG9hdCkgdG8gZm9yY2UgZmxvYXRpbmctcG9pbnQgZGl2aXNpb24KICAgICAgICBpdGVtc1tpXS51X3Byb2ZpdCA9IChmbG9hdClpdGVtc1tpXS5wcm9maXQgLyBpdGVtc1tpXS53ZWlnaHQ7IAogICAgfQoKICAgIGZyYWN0aW9uYWxfa25hcHNhY2soaXRlbXMsIG4sIGtuYXBzYWNrKTsKICAgIAogICAgLy8gT3V0cHV0IHRoZSBmaW5hbCBjb21wdXRlZCBwcm9maXQKICAgIGNvdXQgPDwgcHJvZml0IDw8IGVuZGw7IAogICAgCiAgICByZXR1cm4gMDsgLy8gQWRkZWQgcmV0dXJuIDAgZm9yIGdvb2QgcHJhY3RpY2UKfQ==