zoukankan      html  css  js  c++  java
  • 动态规划-数字三角形V3

    数字三角形V3:
    递归转成递推:思路就是从下往上推,就相当于,从终点往起点推,找每一步的最大值存下来。
    比如第2步中,2,只能与4,5计算,取其最大值,4+2,5+2,所以是7,存下,后续以此类推
    最后求到最顶端的值,即是最大路径的值,这样处理,运算速度极快。
    当然,存储空间还可以优化,有兴趣的大家可以进一步处理。
    第1步:
    7
    3 8
    8 1 0
    2 7 4 4
    4 5 2 6 5 4 5 2 6 5
    第2步:
    7
    3 8
    8 1 0
    2 7 4 4 7 12 10 10
    4 5 2 6 5 4 5 2 6 5
    第3步:
    7
    3 8
    8 1 0 20 13 10
    2 7 4 4 7 12 10 10
    4 5 2 6 5 4 5 2 6 5
    第4步:
    7
    3 8 23 21
    8 1 0 20 13 10
    2 7 4 4 7 12 10 10
    4 5 2 6 5 4 5 2 6 5
    第5步:
    7 30
    3 8 23 21
    8 1 0 20 13 10
    2 7 4 4 7 12 10 10
    4 5 2 6 5 4 5 2 6 5

    python算法实现:
     1 def main():
     2     # 为了方便计算,数组的值从1,1位置开始存储
     3     d = [[0] * 101 for j in range(101)]
     4     maxD = [[-1] * 101 for j in range(101)]
     5 
     6     lines = int(input("请输入行数:"))
     7     for i in range(lines):
     8         line = input().split()
     9         for j in range(i + 1):
    10             d[i + 1][j + 1] = int(line[j])
    11             # 同时给maxD赋值
    12             maxD[i + 1][j + 1] = int(line[j])
    13     # print(d)
    14     # 因为第5行已存储最大值了,所以从第4行开始处理,从后往前递推,
    15     # 最后一个二维数组[1][1]的位置即存储最大路径
    16     for i in range(lines-1,0,-1):
    17         for j in range(1,i+1,1):
    18             maxD[i][j] = max(maxD[i + 1][j], maxD[i + 1][j + 1]) + d[i][j]
    19 
    20     maxPath = maxD[1][1]
    21     print("最大路径值为:%d" % maxPath)
    22 
    23 
    24 if __name__ == "__main__":
    25     main()



  • 相关阅读:
    运算符
    初始编码
    python文件操作
    波士顿房价预测
    机器学习基础-数理统计
    linux基础命令--userdel 删除用户帐户和相关文件
    linux基础命令--rmdir 删除空目录
    linux基础命令--groupdel 删除群组
    linux基础命令--groupadd 创建新的群组
    linux基础命令--groupmod 修改组定义
  • 原文地址:https://www.cnblogs.com/an-wl/p/12904315.html
Copyright © 2011-2022 走看看