[英]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.