# 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<col的话,将会把前面没有的数给覆盖掉
# 本来应该是[[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]) # 所求的最大结果
hhhhhh
基础算法——动态规划之数字三角形
于 2018-07-18 20:29:23 首次发布