这道题其实就是经典的动规。
很多同学第一眼看到题目想到的就是贪心,

比如说:

1
3 2
3 3 5
1 1 1 1

~按最顶层为第一层来算
按照贪心的思路,从第一层的1走到第二层的3,最终得到的值是1+3+3+1=8;
而事实上的最大值是从第一层1走到第二层的2再走到第三层的5,最终的值为1+2+5+1=9;

所以基本的思路就是从最n-1层开始,自身的值等于下层两个值中最大的一个加上自身,最终只需要输出第一层的值即可;

上代码:

#include<bits/stdc++.h>
using namespace std;
int n,tu[1001][1001],a[1001][1001];//三角形说白了就是一个二维图
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=i;j++)cin>>tu[i][j];
    }
    for(int i=n-1;i>=1;i--){//从n-1行开始
        for(int j=1;j<=i;j++){//遍历这一层每一个点
            a[i][j]=tu[i][j]+max(a[i+1][j],a[i+1][j+1]);//记录比较和累加后的值
        }
    }
    printf("%d",a[1][1]);
    return 0;
}  
02-10 03:33