n 为数塔的高度
dp 为数塔
动态转移方程为:dp[i-1][j] = max(dp[i][j], dp[i][j+1]);
完成双重循环之后 dp[0][0] 即为所求的最大值
#include <algorithm>
#include <cstdio>
#include <iostream>
using namespace std;
const int maxn = 500 + 10;
int dp[maxn][maxn];
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
cin >> dp[i][j];
}
}
for (int i = n; i > 0; i--) {
for (int j = 0; j < i; j++) {
dp[i - 1][j] += max(dp[i][j], dp[i][j + 1]);
}
}
cout << dp[0][0] << endl;
return 0;
}