编辑代码

class GreedyItem:
    def __init__(self, name, weight, value):
        self.name = name
        self.totalWeight = weight
        self.totalValue = value


def packBean(packCapacity, items):
    beans = []
    
    # 按照单价从高到低进行排序
    items.sort(key=lambda x: x.totalValue / x.totalWeight, reverse=True)
    
    # 从高到低依次取出物品
    leftPackCapacity = packCapacity
    for item in items:
        if leftPackCapacity > item.totalWeight:
            leftPackCapacity -= item.totalWeight
            beans.append(GreedyItem(item.name, item.totalWeight, item.totalValue))
        else:
            unitPrice = item.totalValue / item.totalWeight
            packWeight = leftPackCapacity
            packValue = packWeight * unitPrice
            beans.append(GreedyItem(item.name, packWeight, packValue))
            leftPackCapacity = 0
            break
    
    return beans


def test():
    items = [
        GreedyItem("苹果", 15, 300),
        GreedyItem("香蕉", 18, 180),
        GreedyItem("桔子", 10, 150),
        GreedyItem("猕猴桃", 9, 270)
    ]

    beans = packBean(20, items)

    maxValue = 0

    print("装了如下物品:")
    for bean in beans:
        maxValue += bean.totalValue
        print(bean.name + " " + str(bean.totalWeight))

    print("总价值:" + str(maxValue))


if __name__ == "__main__":
    test()