//数字三角形,使用了动态规划
//函数solve是《算法入门经典》里面的;其余都是自己写的。
/*
提示 9-3 :可以用递推法计算状态转移方程。地推的关键是边界和计算顺序。
在多数情况下,递推法的时间复杂度是:“状态总数*每个状态的决策个数*决策时间。“
“如果不同状态的决策个数不同,需具体问题具体分析。”
*/
#include <iostream>
#include <algorithm>
#include <cstring>
#include <math.h>
using namespace std;
int n; int d[101][101]; int a[101][101];
int solve(int i,int j)
{
if(d[i][j] >= 0) return d[i][j];
return d[i][j] = a[i][j] + (i == n ? 0 : max(solve(i+1,j),solve(i+1,j+1)));
}
int main()
{
cin >> n;
memset(d,-1,sizeof(d));
for(int i=1; i<=n ; i++)
for(int j=1; j<=i ; j++)
cin >> a[i][j];
cout << solve(1,1) << endl;
return 0;
}