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

来源:互联网 发布:乔约翰逊生涯数据 编辑:程序博客网 时间:2024/06/06 20:29

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 0
原创粉丝点击