1. 程式人生 > >三角形數字路徑最大值問題

三角形數字路徑最大值問題

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))

此方法很巧妙,給我們的思路是,我們不需要知道那個路徑,但是我們可以將繁變簡,最終求得最大值。