#include <iostream>
#include <algorithm>
using namespace std;
static int A[1000][1000];
static int dp[1000][1000];
int main(){
int n;
int maxi = 0;
cin>>n;
for(int i = 0;i < n; i++){
for(int j = 0;j <= i; j++){
cin>>A[i][j];
}
}
dp[0][0] = A[0][0];
for(int i = 1;i < n; i++){
for(int j = 0;j <= i; j++){
if(j == 0){
dp[i][j] = A[i][j] + dp[i-1][j];
}
else if(j == i){
dp[i][j] = A[i][j] + dp[i-1][j-1];
}
else dp[i][j] = A[i][j] + max(dp[i-1][j],dp[i-1][j-1]);
if(maxi < dp[i][j]){
maxi = dp[i][j];
}
}
}
cout<<maxi;
}
最基础的动态规划,每次存储数据,然后取最优,动态规划实质上就是在前几个状态中判断最优状态,于是乎每次都能获得最佳状态