从低端向上,每个结点取下一层左右结点最大值和本身价值相加,dp[0][0]为最后结果
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
#define MAXN 510
typedef long long LL;
LL a[MAXN][MAXN],dp[MAXN][MAXN];
LL sum = ,level;
int main()
{
int i,j;
scanf("%lld",&level);
for(i=;i<level;i++)
for(j=;j<=i;j++)
scanf("%lld",&a[i][j]);
for(i=level-;i>=;i--)
dp[level-][i] = a[level-][i];
for(i=level-;i>=;i--)
{
for(j=;j<=i;j++)
{
dp[i][j] = max(dp[i+][j],dp[i+][j+])+a[i][j];
//printf("%lld\n",dp[i][j]);
}
}
printf("%lld\n",dp[][]);
return ;
}