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()