def fruit_knapsack(weights, values, max_weight):
num_fruits = len(weights)
dp = [[0] * (max_weight + 1) for _ in range(num_fruits + 1)]
for i in range(1, num_fruits + 1):
for j in range(1, max_weight + 1):
if weights[i-1] > j:
dp[i][j] = dp[i-1][j]
else:
dp[i][j] = max(dp[i-1][j], dp[i-1][j-weights[i-1]] + values[i-1])
max_value = dp[num_fruits][max_weight]
selected_fruits = []
i, j = num_fruits, max_weight
while i > 0 and j > 0:
if dp[i][j] != dp[i-1][j]:
selected_fruits.append({'name': f'Fruit-{i}', 'weight': weights[i-1], 'value': values[i-1]})
j -= weights[i-1]
i -= 1
return max_value, selected_fruits[::-1]
weights = [15, 18, 10, 9]
values = [300, 180, 150, 270]
max_weight = 20
max_value, selected_fruits = fruit_knapsack(weights, values, max_weight)
print(f"最大总价值:{max_value}")
print("装水果的策略:")
for fruit in selected_fruits:
print(f"{fruit['name']} (Weight: {fruit['weight']} kg, Value: {fruit['value']} yuan)")