acwing898. 数字三角形

分析

我们可以从下往上走,每个位置都由左下或右下转移过来。

#include<iostream>
#include<iostream>
using namespace std;

const int N=510;
int n,w[N][N],f[N][N];

int main(){
    cin>>n;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=i;j++)
            cin>>w[i][j];
    for(int i=1;i<=n;i++)f[n][i]=w[n][i];
    for(int i=n-1;i;i--)
        for(int j=1;j<=i;j++)
            f[i][j]=max(f[i+1][j],f[i+1][j+1])+w[i][j];
    cout<<f[1][1];
    return 0;
}