P1216 [IOI 1994 / USACO1.5] 数字三角形(洛谷题面

题目

题目描述:

观察下面的数字金字塔。

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

在上面的样例中,从 738757 \to 3 \to 8 \to 7 \to 5 的路径产生了最大权值。

输入格式:

第一个行一个正整数 rr,表示行的数目。

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

输出格式:

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

数据范围与说明:

【数据范围】
对于 100%100\% 的数据,1r10001\le r\le 1000,所有输入在 [0,100][0,100] 范围内。

题目翻译来自 NOCOW。

IOI1994 Day1T1 / USACO Training Section 1.5。

输入输出样例 #1

输入:

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

输出:

1
30

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<bits/stdc++.h>
using namespace std;
int a[1010][1010],f[1010][1010];
int main(){
int n,s=0;
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
f[i][j]=max(f[i-1][j-1],f[i-1][j])+a[i][j];
for(int j=1;j<=n;j++) s=max(s,f[n][j]);
cout<<s;
return 0;
}