특정 위치로 도달하기 위해서 '왼쪽위' 혹은 '바로 위' 2가지 위치에서만 내려올 수 있다.
따라서, 모든 위치를 기준으로 이전 위치로 가능한 2가지 위치까지의 최적의 합 중 더 큰 합을 가지는 경우 선택
n = int(input())
dp = [] #다이나믹 프로그래밍을 위한 DP 테이블 초기화
for _ in range(n):
dp.append(list(map(int, input().split())))
# 다이나믹 프로그래밍으로 두 번째 줄 부터 내려가면서 확인
for i in range(1, n) :
for j in range(i+1):
# 왼쪽 위에서 내려오는 경우
if j == 0 :
up_left = 0 # 범위에서 벗어남
else :
up_left = dp[i-1][j-1] # 값 저장
# 바로 위에서 내려오는 경우
if j == i :
up = 0 # 범위에서 벗어남
else :
up = dp[i-1][j] # 값 저장
# 최대 합으로 저장
dp[i][j] = dp[i][j] + max(up_left, up)
print(max(dp[n-1]))