三角形問題dp演算法

2021-10-05 07:47:55 字數 1318 閱讀 8303

題目:假設給定乙個n行數字三角形,請計算出從三角形頂至底的一條路徑,使該路徑經過的數字總和最大,每一步只能由當前位置向左下或右下。

例如給定乙個三角形:

73 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的位置,那麼三角形就會變成:

73 8

8 1 0

7 12 10 10

73 8

20 13 10

723 21

-》30

由此可見一直由下往上進行累加那麼三角形的行數便會不斷減小直至最後縮減為乙個數值,這便是我們所需要的結果:

row =

int(

input()

)#輸入三角形的行數

flag =

0#計數

a_list =

while flag < row:

b =input()

))flag +=

1flag -=

2#將列表從倒數第二行開始計算

while flag >=0:

i=0while i <

len(a_list[flag]):

ifint

(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 -=

1print

(a_list[0]

[0])

#輸出列表的第乙個元素即計算的結果

dp 數字三角形問題

數字三角形問題 time limit 1000 ms memory limit 65536 kib problem description 給定乙個由n行數字組成的數字三角形如下圖所示。試設計乙個演算法,計算出從三角形的頂至底的一條路徑,使該路徑經過的數字總和最大。對於給定的由n行數字組成的數字三角...

DP 三角形牧場

時間限制 1 sec 記憶體限制 128 mb 和所有人一樣,奶牛喜歡變化。它們正在設想新造型的牧場。奶牛建築師hei想建造圍有漂亮白色柵欄的三角形牧場。她擁有n 3 n 40 塊木板,每塊的長度li 1 li 40 都是整數,她想用所有的木板圍成乙個三角形使得牧場面積最大。請幫助hei小姐構造這樣...

數字三角形 DP

數字三角形 時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 問題描述 小hi和小ho在經歷了螃蟹先生的任務之後被獎勵了一次出國旅遊的機會,於是他們來到了大洋彼岸的美國。美國人民的生活非常有意思,經常會有形形色色 奇奇怪怪的活動舉辦,這不,小hi和小ho剛剛下飛機,就趕上了當...