经典数字三角形 由底向上更新 ,每一步都是当前最优解
#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;
}