经典数字三角形 由底向上更新 ,每一步都是当前最优解
/* ID:jsntrdy1 PROG: numtri LANG: C++ */
#include<cstdio>
#include<iostream>
#include<cstring>
#include<fstream>
using namespace std;
const int N=1010;
ifstream fin("numtri.in");
ofstream fout("numtri.out");
int n;
int dp[N][N];
int a[N][N];
int main()
{
fin>>n;
for(int i=0;i<n;i++)
{
for(int j=0;j<=i;j++)
fin>>a[i][j];
}
//从底往上 最下面一行赋初值
for(int j=0;j<=n-1;j++)
dp[n-1][j]=a[n-1][j];
for(int i=n-2;i>=0;i--)
for(int j=0;j<=i;j++)
{
dp[i][j]=a[i][j]+max(dp[i+1][j],dp[i+1][j+1]);
}
fout<<dp[0][0]<<endl;
return 0;
}