AcWing 898. 数字三角形
原题链接
简单
作者:
英特耐雄纳尔
,
2021-04-25 22:48:40
,
所有人可见
,
阅读 312
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 510,INF=1e9; //不越界
int a[N][N]; //用于存储这个三角形
int f[N][N];
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
scanf("%d",&a[i][j]);
}
for (int i = 0; i <= n; i ++ )
{
for(int j=0;j<=i+1;j++) //每行多初始化f数组一列,防止来自右上↗的越界
f[i][j]=-INF;
}
f[1][1]=a[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])+a[i][j];
}
}
int ans=-INF;
for(int i=1;i<=n;i++) ans=max(ans,f[n][i]);
cout<<ans;
}