#include <cstdio>
#include <algorithm>
using namespace std;
const int MAXN = 200;
int main() {
int n, f[MAXN][MAXN], dp[MAXN][MAXN];
scanf("%d",&n);
for(int i=0; i<n; i++) {
for(int j=0; j<=i; j++) {
scanf("%d",&f[i][j]);
}
}
//边界
for(int i=0; i<n; i++) {
dp[n-1][i] = f[n-1][i];
}
//状态转移方程
for(int i=n-2; i>=0; i--) {
for(int j=0; j<=i; j++) {
dp[i][j] = max(dp[i+1][j], dp[i+1][j+1]) + f[i][j];
}
}
printf("%d\n",dp[0][0]);
return 0;
}
DP-数塔问题
最新推荐文章于 2023-03-05 08:33:28 发布