動態規劃 經典數字倒三角問題

2021-10-10 21:30:00 字數 2110 閱讀 6970

在倒三角形中找到一條從頂點到底邊的路徑,使得路徑上所有數字的和最大。路徑上的每一步只能往左下或者往右下走,只需給出結果,不必給出具體的路徑。

**:

numbers =[[

7],[

3,8]

,[8,

1,0]

,[2,

7,4,

4],[

4,5,

2,6,

5]]def

biggest_number_dpfunc

(layers, numbers)

: best_temp_result =

for i in

range(1

, layers +1)

:if i ==1:

0])else

: temp_list =

for j in

range

(i):

if j ==0:

-1][

0]+ numbers[i -1]

[j])

elif j == i -1:

-1][

-1]+ numbers[i -1]

[j])

else

:max

(best_temp_result[-1

][j -1]

, best_temp_result[-1

][j]

)+ numbers[i -1]

[j])

return best_temp_result,

max(best_temp_result[-1

])print

(biggest_number_dpfunc(

4, numbers)

)

輸出結果:

([[7], [10, 15], [18, 16, 15], [20, 25, 20, 19]], 25)

在倒三角形中找到一條從頂點到底邊的路徑,使得路徑上所有數字的和最大,同時還要保證往左下的步數與往右下的步數相差不超過1。路徑上的每一步只能往左下或者往右下走,只需給出結果,不必給出具體的路徑。

**:

numbers =[[

7],[

3,8]

,[8,

1,0]

,[2,

7,4,

4],[

4,5,

2,6,

5]]def

biggest_number_dpfunc2

(layers, numbers)

: best_temp_result =

for i in

range(1

, layers +1)

:if i ==1:

0])else

: temp_list =

for j in

range

(i):

if j ==0:

-1][

0]+ numbers[i -1]

[j])

elif j == i -1:

-1][

-1]+ numbers[i -1]

[j])

else

:max

(best_temp_result[-1

][j -1]

, best_temp_result[-1

][j]

)+ numbers[i -1]

[j])

if layers %2==

1:return best_temp_result[-1

][int(

(layers -1)

/2)]

else

:return

max(best_temp_result[-1

][int(layers /2)

], best_temp_result[-1

][int(layers /2-

1)])

print

(biggest_number_dpfunc2(

4, numbers)

)

輸出結果:

25

動態規劃 基礎題 數字三角

數字三角形 問題描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 上圖給出了乙個數字三角形。從三角形的頂部到底部有很多條不同的路徑。對於每條路 徑,把路徑上面的數加起來可以得到乙個和,和最大的路徑稱為最佳路徑。你的任務就是求 出最佳路徑上的數字之和。輸入資料 輸入的第一行是乙個整數 ...

動態規劃 數字三角形問題

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

動態規劃 數字三角形問題

有乙個由非負整數組成的三角形,第一行只有乙個數,除了最下行之外每個數的左下方和右下方各有乙個數.3 24 10 1 4 3 2 20 從第一行的數開始,每次可以往左下或右下走一格,直到走到最下行,把沿途經過的數全部加起來,如何走才能使得這個和盡量大?輸入 三角形的行數n,數字三角形的各個數 從上到下...