#include <stdio.h>
#include <stdlib.h>
typedef struct {
double weight;
double value;
double ratio;
} Bean;
int compare(const void* a, const void* b) {
Bean* beanA = (Bean*)a;
Bean* beanB = (Bean*)b;
return (beanB->ratio > beanA->ratio) - (beanB->ratio < beanA->ratio);
}
double maxBeanValue(Bean beans[], int n, double maxWeight) {
qsort(beans, n, sizeof(Bean), compare);
double totalValue = 0.0;
for (int i = 0; i < n; i++) {
if (maxWeight > beans[i].weight) {
maxWeight -= beans[i].weight;
totalValue += beans[i].value;
} else {
totalValue += beans[i].value * (maxWeight / beans[i].weight);
break;
}
}
return totalValue;
}
int main() {
Bean beans[] = {{10, 60, 6}, {20, 100, 5}, {30, 120, 4}};
int n = sizeof(beans) / sizeof(beans[0]);
double maxWeight = 50;
double maxValue = maxBeanValue(beans, n, maxWeight);
printf("Maximum value: %f\n", maxValue);
return 0;
}