class Place:
def __init__(self, name: str, time: int, score: int):
self.name = name
self.time = time
self.score = score
def max(a: int, b: int) -> int:
return a if a > b else b
def main():
places = [Place("故宫", 1, 7), Place("颐和园", 2, 8), Place("长城", 3, 9), Place("天坛", 1, 6)]
n = len(places)
days = 4
dp = [[0] * (days + 1) for _ in range(n + 1)]
for i in range(1, n + 1):
for j in range(1, days + 1):
if places[i - 1].time > j:
dp[i][j] = dp[i - 1][j]
else:
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - places[i - 1].time] + places[i - 1].score)
print(f"最大价值为:{dp[n][days]}")
i = n
j = days
visited = [False] * (days + 1)
while i > 0 and j > 0:
if dp[i][j] != dp[i - 1][j]:
print(places[i - 1].name, end=" ") # 输出选择的地点名称
j -= places[i - 1].time # 更新剩余天数,减去选择地点的所需时间
visited[j] = True # 将已经访问的天数标记为True
i -= 1 # 选择下一个地点
print() # 在输出地点名称后换行
main() # 运行主函数