编辑代码

def plan(days, spot):
    n = len(spot)
    p = [[0] * (days + 1) for _ in range(n + 1)]
    for i in range(1, n + 1):
        for j in range(1, days + 1):
            name, time, score = spot[i - 1]
            if j >= time:
                p[i][j] = max(p[i - 1][j], p[i - 1][j - time] + score)
            else:
                p[i][j] = p[i - 1][j]
    selected_spot = []
    i, j = n, days
    while i > 0 and j > 0:
        if p[i][j] != p[i - 1][j]:
            name, time, score = spot[i - 1]
            selected_spot.append((name, time, score))
            j -= time
        i -= 1
    return p[n][days], selected_spot[::-1]
def main():
    days = 4
    spot = [("故宫", 1, 7), ("颐和园", 2, 8), ("长城", 3, 9), ("天坛", 1, 6)]
    total_score, selected_spot = plan(days, spot)
    print("20计科5班_20052286_张依琳")
    print(f"最大评分为:{total_score}")
    print("选择的景点分别为以下几种:")
    for spot in selected_spot:
        print(f"{spot[0]} - {spot[1]}天")
if __name__ == "__main__":
    main()