[USACO1.5]数字三角形 Number Triangles

题目描述

观察下面的数字金字塔。

写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。

         7 
      3   8 
    8   1   0 
  2   7   4   4 
4   5   2   6   5 

在上面的样例中,从7 到 3 到 8 到 7 到 5 的路径产生了最大

输入输出格式

输入格式:

 

第一个行包含 R(1<= R<=1000) ,表示行的数目。

后面每行为这个数字金字塔特定行包含的整数。

所有的被供应的整数是非负的且不大于100。

 

输出格式:

 

单独的一行,包含那个可能得到的最大的和。

 

输入输出样例

输入样例#1: 复制
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5 

30



DPP

 1 #include<iostream>
 2 using namespace std;
 3 int a[1010][1010],f[1010][1010];
 4 int main ()
 5 {
 6     int n;
 7     cin>>n;
 8     for (int i=1;i<=n;i++)
 9         for (int j=1;j<=i;j++)
10           cin>>a[i][j];
11     for (int i=1;i<=n;i++)
12     {
13         for (int j=1;j<=n;j++)
14           f[i][j]=max(f[i][j],max(f[i-1][j-1],f[i-1][j])+a[i][j]);
15     }
16     int ans=0;
17     for (int i=1;i<=n;i++)
18     {
19         ans=max(ans,f[n][i]);
20     }
21     cout<<ans;
22 }

 

posted @ 2018-12-13 21:17  Melted_czj  阅读(242)  评论(0编辑  收藏  举报
body { background-color:whitesmoke; } // 修改背景颜色为半透明 #home,#sideBarMain>div,#blog-sidecolumn>div>div,.catListView{ background-color:rgba(255,255,255,0); } // 修改其他边框的颜色