//dp入门
dp[i][j]表示以(i,j)为终点到最长路径
dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+data[i][j]
注意边界点
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
int data[105][105];
int dp[105][105];
int main()
{
int n;
while(cin>>n)
{
memset(data,-1,sizeof(data));
memset(dp,-1,sizeof(dp));
int i,j;
for(i=1;i!=n+1;i++)
for(j=1;j!=i+1;j++)
{
cin>>data[i][j];
}
int maxdp=0;
for(i=1;i!=n+1;i++)
for(j=1;j!=i+1;j++)
{
int m=max(dp[i-1][j],dp[i-1][j-1]);
if(m==-1) m=0;
dp[i][j]=m+data[i][j];
if(i==n)
maxdp=max(maxdp,dp[i][j]);
}
cout<<maxdp<<endl;
}
return 0;
}