基礎演算法 動態規劃之數字三角形

2021-08-21 13:37:44 字數 1050 閱讀 6691

# 7

# 3 8

# 8 1 0

# 2 7 4 4

# 4 5 2 6 5

import sys

lines = sys.stdin.readlines()

row = len(lines) # 行

col = len(lines[-1].strip().split()) # 列

# 構造矩陣dp,用於儲存原始三角形

dp = [[0

for c in range(col)] for r in range(row)]

# 向dp矩陣中填入三角形數字

for i in range(row):

tri_num = list(map(int, lines[i].strip().split()))

for j in range(len(tri_num)):

dp[i][j] = tri_num[j]

print(dp)

# 構造maxsum矩陣,初始化為dp

maxsum = dp

for i in range(row - 2, -1, -1):

print(maxsum[i])

j = 0

# 如果這裡不是j<=i,而是j# 本來應該是[[30, 0, 0, 0, 0], [23, 21, 0, 0, 0], [20, 13, 10, 0, 0], [7, 12, 10, 10, 0], [4, 5, 2, 6, 5]]

# 錯誤的就會變成[[30, 21, 10, 10, 0], [23, 21, 10, 10, 0], [20, 13, 10, 10, 0], [7, 12, 10, 10, 0], [4, 5, 2, 6, 5]]

while j <= i:

maxsum[i][j] = max(maxsum[i + 1][j], maxsum[i + 1][j + 1]) + dp[i][j]

j += 1

print(maxsum)

print(maxsum[0][0]) # 所求的最大結果

數字三角形 動態規劃基礎

問題描述 圖 示出了乙個數字三角形。請編乙個程式計算從頂至底的某處的一條路 徑,使該路徑所經過的數字的總和最大。每一步可沿左斜線向下或右斜線向下走 1 三角形行數 100 三角形中的數字為整數0,1,99 圖 輸入格式 檔案中首先讀到的是三角形的行數。接下來描述整個三角形 輸出格式 最大總和 整數 ...

動態規劃 數字三角形

如圖所示的數字三角形,從頂部出發,在每一結點可以選擇向左走或得向右走,一直走到底層,要求找出一條路徑,使路徑上的值最大。第一行是數塔層數n 1 n 100 第二行起,按數塔圖形,有乙個或多個的整數,表示該層節點的值,共有n行。輸出最大值。5 1311 8 12 7 26 6 14 15 8 12 7...

動態規劃 數字三角形

7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 在上面的數字三角形中尋找一條從頂部到底邊的路徑,使得 路徑上所經過的數字之和最大。路徑上的每一步都只能往左下或 右下走。只需要求出這個最大和即可,不必給出具體路徑。三角形的行數大於1小於等於100,數字為 0 99 5 三角形行數。下面是三...