#include <stdio.h>
typedef struct {
char name[20];
int price;
int weight;
} Item;
int maxProfit = 0;
Item items[] = {
{"音响", 3000, 4},
{"笔记本电脑", 2000, 3},
{"吉他", 1500, 1}
};
void knapsack(int currentWeight, int currentProfit, int index) {
if (currentWeight <= 4 && currentProfit > maxProfit) {
maxProfit = currentProfit;
}
int remainingWeight = 4 - currentWeight;
int upperBound = currentProfit;
for (int i = index; i < 3; i++) {
if (items[i].weight <= remainingWeight) {
remainingWeight -= items[i].weight;
upperBound += items[i].price;
} else {
upperBound += items[i].price * remainingWeight / items[i].weight;
break;
}
}
if (upperBound <= maxProfit) {
return;
}
if (index < 3) {
knapsack(currentWeight + items[index].weight, currentProfit + items[index].price, index + 1);
knapsack(currentWeight, currentProfit, index + 1);
}
}
int main() {
knapsack(0, 0, 0);
printf("最大利润:%d\n", maxProfit);
return 0;
}