分析
其实就是从上面到下面,从两个方向下来,我们数组从1开始赋值,就可以不用考虑越界的事了;
#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
int dp[1010][1010];
int main() {
int r;
cin >> r;
for (int i = 1; i <= r; ++i) {
for (int j = 1; j <= i; ++j) {
cin >> dp[i][j];
}
}
//从第二行向下递推
for (int i = 2; i <= r; ++i) {
for (int j = 1; j <= i; ++j) {
dp[i][j] += max(dp[i - 1][j - 1], dp[i - 1][j]);//可以从左上或右上过来
}
}
int ans = 0;
for (int i = 1; i <= r; ++i) {
ans = max(ans, dp[r][i]);
}
cout << ans;
return 0;
}