n=int(input()) task=[] for i in range(n): # 将每周的计划作为一个小列表,再加入到task列表中 task.append(list(map(int,input().split()))) # v中每个位置存放截止到当前周最大的价值量 v=[] # 初始状态会用到第0周和第1周,第0周的最大价值量是0,第一周的最大价值量是两个任务中较大的价值量 v.append(0) v.append(max(task[0][0],task[0][-1])) # 第i周有两种情况, # 1.做i周的简单任务,这意味着第i周的价值量是第i-1周的价值量+第i周简单任务的价值量; # 2.做第i周的复杂任务,这意味着第i-1周不能做任务,那么第i周的价值量是第i-2周的价值量+第i周复杂任务的价值量; # 取上述两种情况的最大值 for i in range(1,n): v.append(max(v[i-1]+task[i][-1],v[i]+task[i][0])) print(v[-1])
略激动,第一次靠自己做出动态规划的题目,我觉得动态规划中最重要的就是确定初始状态和转移方程了。还有就是用python真的很简洁!