数字金字塔

· · 个人记录

```cpp
//顺推法 
#include<bits/stdc++.h>
using namespace std;
int a[1001][1001];
int main() {
    int n,ma=-1;
    cin>>n;
    for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                cin >> a[i][j];
            }
        }
    for(int i=1;i<=n;i++){
    for(int j=1;j<=i;j++){
        a[i][j]+=max(a[i-1][j-1],a[i-1][j]);
    }
    }
    for(int i=1;i<=n;i++){
        ma=max(ma,a[n][i]);
    }
    cout<<ma;
    return 0;
}
//逆推法 
#include<bits/stdc++.h>
using namespace std;
int a[1001][1001];
int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= i; j++) {
            cin >> a[i][j];
        }
    }
    for (int i = n-1; i >= 1; i--) {
        for (int j = 1; j <= i; j++) {
            a[i][j]+=max(a[i+1][j+1],a[i+1][j]);
        }
    }
    cout<<a[1][1];
    return 0;
}