数字三角形状态转移方程(由底层向顶层):
                                  a[i][j]=max(a[i+1][j+1],a[i+1][j])+a[i][j]

(数组a为输入存储数组,n为层数,同时也是列数,a[i][j]表示该点到底层的最大权值之和(即最长路径))
1.由底层向顶层推时最底层到底层的权值是它本身,所以从n-1层开始推
2.n-1层的每个点到底层的最大权值为----该点权值+max(下方点的权值,右下方点的权值)
3.n-2,n-3,n-4层每个点的道理亦是如此,直到推到第一层即是答案

e.g.
    0      i   7
    1      i   3  8
    2      i   8  1  0
    3      i   2  7  4  4
    4      i   4  5  2  6  5
               j  j  j  j  j
               0  1  2  3  4

代码如下:

#include<iostream>
using namespace std;
int main() {
    int n;
    cin>>n;
    int a[n][n]; 
    for(int i=0; i<n; i++) {
        for(int j=0; j<=i; j++)
            cin>>a[i][j];
    }


    for(int i=n-2; i>=0; i--) {
        for(int j=0; j<=i; j++) {
            a[i][j]=a[i][j]+max(a[i+1][j],a[i+1][j+1]);
        }
    }
    cout<<a[0][0];
    return 0;
}