很基础的动态规划问题。
用dp[i][j]二维数组表示达到该位置的最大和。
按从下到上的顺序遍历。
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int a[101][101];
int dp[101][101];
int main()
{
int n,i,j;
cin>>n;
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
cin>>a[i][j];
}
for(i=n;i>=1;i--)
{
for(j=i;j>=1;j--)
{
dp[i][j]=max(dp[i+1][j]+a[i][j],dp[i+1][j+1]+a[i][j]);
}
}
cout<<dp[1][1]<<endl;
}
。