• 数字金字塔最大路径和——递归


    题目描述

    假设有如下所示的一个数字金字塔,现在,要求写一个程序来查找从顶点到底部任意处结束的路径,使路径经过的数字的和最大,并输出该路径的最大和。比如以下金字塔的和最大路径的和为7+3+8+7+5=30。
    7
    3 2
    8 1 0
    2 7 4 4
    4 5 2 6 5
     
     C++ Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    #include <iostream>
    #include <cmath>

    using namespace std;

    const int MAXLAYER = 5// 金字塔的最大层数

    /** @brief
     * 计算金字塔中第layer层第pos个元素在数组中的下标
     *
     * @param layer int 金字塔中第layer层
     * @param pos int 金字塔中第layer层第pos个元素
     * @return int
     *
     */

    int Index(int layer, int pos)
    {
        
    return layer * (layer - 1) / 2 + pos;
    }

    /** @brief
     * 金字塔自上而下路径中,路径和的最大值
     *
     * @param pNums int* 存储金字塔中的数字,这里是一维数组,按层次顺序进行存储
     * @param layer int 金字塔中的第layer层[1, MAXLAYER]
     * @param pos int 金字塔中第layer层的第pos([0, layer-1])个元素
     * @return int 最大路径和
     *
     */

    int MaxPathSum(int *pNums, int layer, int pos)
    {
        
    if(MAXLAYER == layer)
        {
            
    return pNums[Index(layer, pos)];
        }

        
    /**
         * 第layer层的第pos个元素,只能向第layer+1层的第pos或第pos+1个元素走
         */

        
    return max(MaxPathSum(pNums, layer + 1, pos + 0), MaxPathSum(pNums, layer + 1, pos + 1))
               + pNums[Index(layer, pos)];
    }

    int main()
    {
        
    // 数组的大小应该为 MAXLAYER * (MAXLAYER + 1) / 2
        int nums[] = {7328102744452 ,65};
        cout << MaxPathSum(nums, 
    10) << endl;

        
    return 0;
    }
     
    说明:程序测试有限,不足还望指出。请不吝赐教!      
  • 相关阅读:
    Sqlmap使用详解
    WEB漏洞学习手册
    量压形态的使用方法
    sql执行过程及常见优化手段
    什么是JavaScript 函数作用域
    git http 拉取代码 自动输入用户名和密码
    PHP 报文件写入无权限 file_put_contents failed to open stream: Permission denied in xxxxx on line 2
    记一次 解决PHP Linux服务器报 打开文件数过多的异常
    微信开发 坑 记录帖
    python 安装 cv2 注意事项 填坑 opencv-python 找不到指定的模块
  • 原文地址:https://www.cnblogs.com/fengkang1008/p/4794855.html
Copyright © 2020-2023  润新知