#include <bits/stdc++.h> using namespace std;int main() {// 数据行数,也就是列数int r;cin >> r;// 根据输入的行数创建对应大小的数组int x[r][r];// 将数组所有数据初始化为0memset(x, 0, sizeof(x));// 读入数据for(int i=0;i<r;i++){// 根据数据结构,第0行1个数据,第1行2个数据,第2行3个数据...// 因此每行数据量和行号i的关系应该是:数据量=i+1for(int j=0;j<i+1;j++){cin >> x[i][j];}}// 逆向递推,从倒数第二行开始,把下方一行同一条路上来的较大数累加上来for(int i=r-2;i>=0;i--){// 遍历当前行的每个数据,数据量同样=i+1for(int j=0;j<i+1;j++){// 当前元素 = 当前元素 + 下方一行中需要从本元素经过的所有元素中最大的元素// 一轮循环完保证本行所有元素均已最大化加成,也即从下方上来的线路到本处已是值最大。x[i][j] += x[i+1][j] > x[i+1][j+1] ? x[i+1][j] : x[i+1][j+1];}}cout << x[0][0];return 0; }