AcWing 898. 数字三角形
原题链接
简单
作者:
rushhhhh
,
2021-02-19 12:10:34
,
所有人可见
,
阅读 255
#include <iostream>
using namespace std;
/*
状态表示f[i,j]
集合:从[1,1]到[i,j]的所有路径
属性:路径数字和,最大值
状态计算
f[i,j] = max(f[i-1,j-1], f[i-1,j]) + g[i][j]
*/
const int N = 502, INF = 1e9;
int f[N][N], g[N][N];
int main()
{
int n;
cin >> n;
for(int i=1; i<=n; i++)
for(int j=1; j<=i; j++)
cin >> g[i][j];
for(int i=0; i<=n; i++)
for(int j=0; j<=i+1; j++)
f[i][j] = -INF;
f[1][1] = g[1][1];
for(int i=2; i<=n; i++)
for(int j=1; j<=i; j++)
f[i][j] = max(f[i-1][j-1], f[i-1][j]) + g[i][j];
int ans = -INF;
for(int i=1; i<=n; i++)
ans = max(ans, f[n][i]);
cout << ans;
return 0;
}