我制作了一个程序,用于查找三角形中所有可能路径的最大总和
实施例
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.Anyone请帮我纠正我的代码?
答案 0 :(得分:0)
如果我没错,这是你的要求
对于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
答案 1 :(得分:0)
您尚未指定有效路径,因此就像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))))