题目描述
题目链接
https://www.acwing.com/problem/content/900/
思路分析
- 首先,这个题是一道非常经典的动态规划问题
- 要求最大数字和,有三种方案:
- 第一种:暴力搜索 但是一共有2的n-1次方种方案,时间复杂度太高了
- 第二种:从上到下DP,但是需要判定边界,代码量过多
- 第三种:从下到上DP,不需要考虑特判,综合下来我们就采取倒序DP的方法
代码实现
#include<iostream>
using namespace std;
const int N=510;
int f[N][N];
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
cin>>f[i][j];
}
}
for(int i=n;i>=1;i--)
{
for(int j=i;j>=1;j--)
{
f[i][j]=max(f[i+1][j],f[i+1][j+1])+f[i][j];
//原f[i][j]存储原三角形值,更新后的f[i][j]存新的状态值
}
}
cout<<f[1][1]<<endl;
}