题目传送门
分析:到达某个点无非是两种走法,从它的左上角来和从它的正上方来,根据这个写出状态转移方程即可
AC代码:
#include<bits/stdc++.h>
using namespace std;
int a[1000 + 10][1000 + 10];
int main() {
int r;
cin >> r;
for (int i = 1; i <= r; i++) {
for (int j = 1; j <= i; j++)
cin >> a[i][j];
}
int ans = 0;
int dp[1000 + 10][1000 + 10] = {0};
for (int i = 1; i <= r; i++) {
for (int j = 1; j <= i; j++) {
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j-1]) + a[i][j];
if (dp[i][j] > ans)
ans = dp[i][j];
}
}
cout << ans << endl;
}