#include <iostream>
using namespace std;
int a[200][200];
int bk[200][200];
int n,m;
int dfs(int x,int y){
if(x==n){//找到最下面一层,停止寻找
return bk[x][y]=a[x][y];
}
if(bk[x][y])//记忆化搜索,已经找到最大值的点不再向下找
return bk[x][y];
return bk[x][y]=a[x][y]+max(dfs(x+1,y),dfs(x+1,y+1));
//找这个数下面的数和右下的数最大值
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
cin>>a[i][j];
cout<<dfs(1,1)<<endl;
return 0;
}
04-15
2315
11-28
1万+