簡體   English   中英

三角形中最大和的路徑

[英]Path with maximum sum in a triangle

我編寫了一個程序,用於查找三角形中所有可能路徑之間的最大和

例:

       1
      2 1
     1 2 3

那么所有可能路徑中的最大值為1 + 2 + 3 = 6

我的代碼:

def maxSum(tri, n):
    if n > 1:
         tri[1][1] = tri[1][1]+tri[0][0]
         tri[1][0] = tri[1][0]+tri[0][0]
    for i in range(2, n):
         tri[i][0] = tri[i][0] + tri[i-1][0]
         tri[i][i] = tri[i][i] + tri[i-1][i-1]
    for j in range(1, i):
         if tri[i][j]+tri[i-1][j-1] >= tri[i][j]+tri[i-1][j]:
            tri[i][j] = tri[i][j] + tri[i-1][j-1]
         else:
            tri[i][j] = tri[i][j]+tri[i-1][j]
print max(tri[n-1])


#my list containing the triangle
tri = [[1], [2,1], [1,2,3]]
maxSum(tri, 3)

但是我的代碼將輸出打印為5.有人可以幫助我更正我的代碼嗎?

如果我沒看錯,這是您的要求

對於3的三角形,您將有6個元素,並且想要獲得最大路徑(表示選擇所有可能的3個元素組合,並獲得3個數字的組合,以得到最大和。這可以通過簡單的代碼實現

`# declaring list
tri=[[1], [2, 1], [1, 2, 3]]`

#getting all possible 3 elements combinations out of available 6 elements. The below two lines will give list of tuples
import itertools
temptri=list(itertools.product(*tri))

#Converting tuple to list
ftri=[]
for i in temptri:
    ftri.append(list(i))
#getting max sum of the avilable 3 elements combinations
print sum(max(ftri, key=sum))

輸入/輸出示例

input
tri=[[1], [2, 5], [1, 2, 3]]
output 
6

input
[[1], [2, 5], [1, 2, 3]]
output
9

input
[[1], [2, 5], [1, 2, 3],[1,2,3,7]]
output
16

您尚未指定有效路徑是什么,因此就像Sandeep Lade一樣,我也做出了一個假設:要獲得三角形中最大數量的總和:

def maximum(x):
    return max(x)

triangle= [[1], [2, 1], [1, 2, 3],[2,3,4,5]]
#the above can be represented as:
#        1
#      2   1
#     1  2  3
#    2  3  4  5

max_numbers = list(map(maximum,triangle))
print(max_numbers,'====>',sum(max_numbers))

為您提供三角形中最大數量的總和,以及該三角形可擴展為任意大小

您可以使用lambda函數使代碼更加簡潔:

print(sum(list(map(lambda x:max(x),triangle))))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM