编辑代码

def max_value_fruits(weights, values, capacity):
    n = len(weights)
    dp = [[0] * (capacity + 1) for _ in range(n + 1)]

    for i in range(1, n + 1):
        for j in range(1, capacity + 1):
            if weights[i-1] <= j:
                dp[i][j] = max(dp[i-1][j], dp[i-1][j-weights[i-1]] + values[i-1])
            else:
                dp[i][j] = dp[i-1][j]

    max_value = dp[n][capacity]
    return max_value, dp

def print_fruit_strategy(dp, weights, capacity, names):
    n = len(weights)
    items = []
    w = capacity
    for i in range(n, 0, -1):
        if dp[i][w] != dp[i-1][w]:
            items.append(i-1)
            w -= weights[i-1]
    items.reverse()
    print("装入的水果策略为:")
    for item in items:
        print(f"{names[item]}({weights[item]}kg)")

weights = [15, 18, 10, 9]
values = [300, 180, 150, 270]
capacity = 20
names = ["苹果", "香蕉", "橘子", "猕猴桃"]
maxValue, dp = max_value_fruits(weights, values, capacity)
print("能够获得的最大总价值为:", maxValue)
print_fruit_strategy(dp, weights, capacity, names)