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真的很简洁!