您的位置:首页 > 其它

USACO - Chapter1 Section 1.5 - Number Triangles

2017-05-14 22:59 357 查看
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

输出样例#1:

30

经典DP,本题的状态是 当前位置到底层的得分最值。

dp[i][j] = min(dp[i+1][j],dp[i+1][j+1]) + a[i][j]

Code

#include<bits/stdc++.h>
using namespace std;
int a[1005][1005];
int s[1005][1005];
int main()
{
int n;
cin >> n;
for (int i=0;i<n;i++)
for (int j=0;j<i+1;j++)
cin >> a[i][j];

for (int i=0;i<n;i++)
s[n-1][i] = a[n-1][i];

for (int i=n-2;i>=0;i--)
for (int j=0;j<i+1;j++)
s[i][j] = max(s[i+1][j],s[i+1][j+1]) + a[i][j];

cout << s[0][0];
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: