倒叙dp从最后一个位置开始(a[N][N]初始化为零)
把每个位置可选的最大的值都存下来再加上本身的值记录在a[i][j]中
(每个a[i][j]都在时时更新)
最后把a[1][1]输出
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
const int N=505;
int a[N][N];
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
cin>>a[i][j];
}
}
for(int i=n;i>=1;i--)
{
for(int j=i;j>=1;j--)
{
a[i][j]+=max(a[i+1][j],a[i+1][j+1]);
}
}
cout<<a[1][1];
return 0;
}