题目链接:数字三角形
过了好久终于又开始练习啦,这一次学习的是动态规划~
动态规划主要是选or不选的问题,通常采用数组来记录状态or过程,用空间换取时间,保证题目不会出现TLE的情况。
这道题比较简单,最后我是用从底向上的方法先预先计算好opt数组,最后可以直接使用。
#include<iostream>
#define MAXN 1005
using namespace std;
int num[MAXN][MAXN];
int opt[MAXN][MAXN];
int main(void)
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
cin>>num[i][j];
for(int i=1;i<=n;i++) opt[n][i]=num[n][i];
for(int i=n-1;i>=1;i--){
for(int j=1;j<=i;j++){
opt[i][j]=num[i][j]+max(opt[i+1][j],opt[i+1][j+1]);
}
}
cout<<opt[1][1]<<endl;
return 0;
}