#include <stdio.h>
#include <stdlib.h>
typedef struct {
int weight;
int value;
} Bean;
int cmp(const void* a, const void* b) {
Bean* beanA = (Bean*)a;
Bean* beanB = (Bean*)b;
double ratioA = (double)beanA->value / beanA->weight;
double ratioB = (double)beanB->value / beanB->weight;
if (ratioA < ratioB)
return 1;
else if (ratioA > ratioB)
return -1;
return 0;
}
double knapsack(int n, int capacity, Bean* beans) {
qsort(beans, n, sizeof(Bean), cmp);
double totalValue = 0.0;
int i;
for (i = 0; i < n; i++) {
if (beans[i].weight <= capacity) {
totalValue += beans[i].value;
capacity -= beans[i].weight;
} else {
totalValue += (double)beans[i].value * capacity / beans[i].weight;
break;
}
}
return totalValue;
}
int main() {
int n;
int capacity;
printf("请输入豆子数量和背包容量:");
scanf("%d %d", &n, &capacity);
Bean* beans = (Bean*)malloc(n * sizeof(Bean));
printf("请分别输入每个豆子的重量和价值:\n");
for (int i = 0; i < n; i++) {
scanf("%d %d", &beans[i].weight, &beans[i].value);
}
double totalValue = knapsack(n, capacity, beans);
printf("背包所能装下的最大价值为:%lf\n", totalValue);
free(beans);
return 0;
}