USACO-Section 1.5 Number Triangles[贪心]

经典数字三角形 由底向上更新 ,每一步都是当前最优解

/* 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;
}
点赞