题目
讲解
和之前的DP解法差不多,先进行分析
--状态表示 是个二维的所以为fi, j],该集合是从顶部到[i, j]的最大路径
--集合的属性为 MAX
--状态计算 由于该层的该点从从上一层的临近的两个点推过来的,所以只要找到其状态转移方程就行
代码
#include <bits/stdc++.h>
using namespace std;
const int INF = -0x3f3f3f;
int n;
int main()
{
cin >> n;
int f[n+1][n+1];
for (int i = 1; i <= n; i ++)
for (int j = 1; j <= i; j ++)
{
cin >> f[i][j];
}
for (int i = n - 1; i >= 1; i --)
for (int j = i; j >= 1; j --)
{
f[i][j] = max(f[i][j] + f[i + 1][j], f[i][j] + f[i + 1][j + 1]);
}
cout << f[1][1] << endl;
system("pause");
}