三角形数字路径最大值问题

Python 专栏收录该内容
12 篇文章 0 订阅

a=[
[75],
[95,64],
[17,47,82],
[18,35,87,10],
[20, 4, 82, 47, 65],
[19 ,1 ,23, 75 ,3, 34],
[88, 2, 77, 73, 7, 63, 67],
[99 ,65 ,4 ,28 ,6 ,16 ,70 ,92],
[41, 41, 26, 56, 83, 40, 80, 70, 33],
[41 ,48 ,72 ,33 ,47 ,32 ,37 ,16 ,94 ,29],
[53, 71, 44 ,65 ,25, 43 ,91, 52, 97, 51, 14],
[70 ,11 ,33 ,28 ,77 ,73 ,17 ,78 ,39 ,68 ,17 ,57],
[91, 71, 52, 38, 17, 14, 91, 43, 58, 50, 27, 29, 48],
[63 ,66 ,4 ,68 ,89 ,53 ,67 ,30 ,73 ,16 ,69, 87 ,40 ,31],
[4, 62, 98, 27, 23, 9, 70, 98, 73, 93, 38, 53 ,60, 4, 23] ]
已知三角形数字,求选取路径,使得路径上的数字和最大?

#阶梯相加
91    71    52       
63   66    04   68    
04   62   98   27   23

先比较4与62的大小,然后将大值加63得125放在63的位置,然后将04与62的位置换成0。
按此方法,进行最终会在最顶层得到一个数,为最大值。虽然不知道那个路径但是我们知道最大值。
根据此写代码:

def triangle(a):
    L1=len(a)#L1=4
    for i in range(L1-1,-1,-1):
        for j in range(i):
            a[i-1][j]+=max(a[i][j],a[i][j+1])
    return a[0][0]
print(triangle(a)) 

此方法很巧妙,给我们的思路是,我们不需要知道那个路径,但是我们可以将繁变简,最终求得最大值。

  • 0
    点赞
  • 2
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 1024 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值