AcWing 898. 数字三角形(线性DP)
Posted MangataTS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing 898. 数字三角形(线性DP)相关的知识,希望对你有一定的参考价值。
题目连接
https://www.acwing.com/problem/content/description/900/
思路
我们知道对于当前的这一层,只能从左上和正上方转移过来,那么我们定义 f [ i ] [ j ] f[i][j] f[i][j]表示的是从第一层到第i层第j列的最大路径数值和,那么不难发现 f [ i ] [ j ] = a [ i ] [ j ] + m a x ( f [ i − 1 ] [ j − 1 ] , f [ i − 1 ] [ j ] ) f[i][j] = a[i][j] + max(f[i-1][j-1],f[i-1][j]) f[i][j]=a[i][j]+max(f[i−1][j−1],f[i−1][j]),注意的是开始的状态除了(0,0)位置为0其余都为-INF
代码
#include<bits/stdc++.h>
using namespace std;
const int N = 5e2+10;
int a[N][N],f[N][N];
int n;
int main()
cin>>n;
memset(f,-0x3f3f3f3f,sizeof f);
f[0][0] = 0;
for(int i = 1;i <= n; ++i)
for(int j = 1;j <= i; ++j)
cin>>f[i][j],f[i][j] += max(f[i-1][j-1],f[i-1][j]);
int ans = -0x3f3f3f3f;
for(int i = 1;i <= n; ++i) ans = max(f[n][i],ans);
cout<<ans<<endl;
return 0;
以上是关于AcWing 898. 数字三角形(线性DP)的主要内容,如果未能解决你的问题,请参考以下文章