def beibao(capacity, fruits):
# 计算每种水果的价值密度并排序
# 这里使用了lambda函数和列表的sort方法,根据每种水果的价值密度(价值/重量)进行降序排序
fruits.sort(key=lambda x: x[2], reverse=True)
# 初始化总价值为0,这是我们要最大化的目标
total_value = 0
# 初始化策略列表,用于存储最优装包策略
strategy = []
# 遍历每种水果,检查是否应该将其添加到背包中
for fruit in fruits:
# 如果背包已满(容量为0),则结束循环
if capacity <= 0:
break
# 解包水果的信息
name, weight, value = fruit
# 检查当前的水果是否可以完全装入背包
if weight <= capacity:
# 如果可以,那么就将其全部装入背包
capacity -= weight # 更新背包的剩余容量
total_value += value # 更新背包的总价值
strategy.append(f"{name}: {weight}kg") # 将这种水果添加到策略列表中
else:
# 如果不能完全装入,那么就只装入部分
fraction = capacity / weight # 计算可以装入的部分
total_value += value * fraction # 更新背包的总价值
strategy.append(f"{name}: {capacity}kg") # 将这种水果的一部分添加到策略列表中
capacity = 0 # 更新背包的剩余容量为0
# 返回最大的总价值和对应的装包策略
return total_value, strategy
# 定义水果数据,每种水果包含名称、重量和价值
fruits = [("苹果", 15, 300), ("香蕉", 18, 180), ("橘子", 10, 150), ("猕猴桃", 9, 270)]
# 定义背包的容量
capacity = 20
# 调用beibao函数,获取最大的总价值和对应的装包策略
total_value, strategy = beibao(capacity, fruits)
# 打印最大的总价值
print(f"总价值: {total_value}")
# 打印装包策略
print("装入策略:")
for s in strategy:
print(s)