1625 数字金字塔

Posted Ed_Sheeran

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1625 数字金字塔相关的知识,希望对你有一定的参考价值。

1625 数字金字塔

链接:http://codevs.cn/problem/1625/

 

USACO

 时间限制: 1 s
 空间限制: 128000 KB
 
 
 
 
题目描述 Description

考虑在下面被显示的数字金字塔.

写一个程序来计算从最高点开始在底部任意处结束的路径经过数字的和的最大.

每一步可以走到下方的点也可以到达右下方的点.

7

3 8

8 1 0

2 7 4 4

4 5 2 6 5

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

输入描述 Input Description

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

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

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

输出描述 Output Description

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

样例输入 Sample Input

5

7

3 8

8 1 0

2 7 4 4

4 5 2 6 5

样例输出 Sample Output

30

数据范围及提示 Data Size & Hint
题解:h[i][j]存该点数值, f[i][j]存从底部到该点的最大和,为该点值+Max(该点正下方最大和,该点斜下方最大和),即
f[i][j]=max(f[i+1][j]+h[i][j],f[i+1][j+1]+h[i][j]);
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
int h[1005][1005],f[1005][1005];
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=i;j++)
            scanf("%d",&h[i][j]);
    for(int j=1;j<=n;j++)f[n][j]=h[n][j];
    int i=n;
    while(i>1){
        i--;
        for(int j=1;j<=i;j++)
            f[i][j]=max(f[i+1][j]+h[i][j],f[i+1][j+1]+h[i][j]);
            
    }
        
    cout<<f[1][1]<<endl;
}

 

以上是关于1625 数字金字塔的主要内容,如果未能解决你的问题,请参考以下文章

打印数字金字塔(python)

用python打印数字金字塔

求镂空的倒金字塔java代码....金字塔可用*代替! 谢了

Python输出数字金字塔

java n的金字塔

怎么用java打印金字塔