(18)最大路徑和
一個給定的4層數字三角形(第n層有n個數),從最頂數位出發每次只能移動到左下或右下的直到最底層。在所有的路徑中,經過路徑數字和最大值是3+7+4+9=23。
【最後目標】
一個給定的15層數字三角形(第n層有n個數),從最頂數位出發每次只能移動到左下或右下的直到最底層。請找出最大的經過路徑數字和。
【討論】
每次移動只有左下和右下兩種不同走法,若是左下用0表示,右下用1表示,則走3層有幾種不同走法呢?
用0和1組成長度3的數列有000,001,010,011,100,101,110,111,共有2^3=8種
練習1:用0和1組成長度14的數列有16384種不同的排列法
1 2 3 4 5 6 7 | import itertools
x = [0,1]
routes = []
for p in itertools.product(x, repeat=14):
routes.append(p)
print(len(routes))
|
練習2:讀進15層數字,並且求某一特定條路徑的數字和。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | # -*- coding: UTF-8 -*-
numbers = []
# 打開檔案
file = open("d:/numbers4.txt", "r")
# 讀取檔案
for line in file.readlines(): #依序讀取每行
line = line.strip() #去掉每行頭尾空白
number_list = []
for number in line.split():
number_list.append(int(number))
numbers.append(number_list)
# 關閉檔案
file.close()
print(numbers)
route = "01100110101011"
i = 0
j = 0
sum = 75
for digit in route:
i = i + 1
if digit == "0":
sum = sum + numbers[i][j]
else :
j = j + 1
sum = sum + numbers[i][j]
print(sum)
|
本單元課程自2018.4.23日起已被瀏覽 386 次