zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    《构建之法》第四章读后感
    复利计算-单元测试
    hadoop 不同URLTitle文件提取关联URL
    全角转半角-半角转全角
    leetcode unique binary search Tree
    leetcode validBST
    leetcode -- Flatten Binary Tree to Linked List
    堆排序
    比较字符串总结:如果计算两个字符串的相似度或者距离
    leetcode Populating Next Right Pointers in Each Node
  • 原文地址:https://www.cnblogs.com/EdSheeran/p/7466250.html
Copyright © 2011-2022 走看看