编辑代码

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)