题目:假设给定一个n行数字三角形,请计算出从三角形顶至底的一条路径,使该路径经过的数字总和最大,每一步只能由当前位置向左下或右下。
例如给定一个三角形:
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
思路是从下往上进行累加,用大的数替换掉小的数,例如:
在最后两行中,2要分别和4与5进行相加,7要分别和5和2进行相加,以此类推…
那么我们就可以用2与4的和和2与5的和中大的数去替换2的位置,7与5的和和7与2的和中大的数去替换2的位置,那么三角形就会变成:
7
3 8
8 1 0
7 12 10 10
-》
7
3 8
20 13 10
-》
7
23 21
-》
30
由此可见一直由下往上进行累加那么三角形的行数便会不断减小直至最后缩减为一个数值,这便是我们所需要的结果:
row = int(input()) #输入三角形的行数
flag = 0 #计数
a_list = []
while flag < row:
b = input()
a_list.append(b.split())
flag += 1
flag -= 2 #将列表从倒数第二行开始计算
while flag >= 0:
i=0
while i < len(a_list[flag]):
if int(a_list[flag][i]) + int(a_list[flag+1][i]) > int(a_list[flag][i]) + int(a_list[flag+1][i+1]): #用较大的和来替换掉原来的数值
a_list[flag][i] = int(a_list[flag][i]) + int(a_list[flag+1][i])
else:
a_list[flag][i] = int(a_list[flag][i]) + int(a_list[flag + 1][i+1])
i += 1
flag -= 1
print(a_list[0][0]) #输出列表的第一个元素即计算的结果