AcWing 898. 数字三角形-python
原题链接
简单
作者:
Actor丶
,
2020-01-29 12:45:34
,
所有人可见
,
阅读 899
# 输入样例
n = int(input().strip())
arr = [[0 for i in range(n+1)] for j in range(n+1)] # arr.shape [0~n][0~n],默认值为0
for i in range(1,n+1):
in_li = list(map(int, input().split()))
for j in range(1,i+1):
arr[i][j] = in_li[j-1]
# 初始化dp数组
dp = [[float("-inf") for i in range(n+1)] for j in range(i+2)] # !!!技巧:对输入三角形扩大一行两列,扩充的元素用-inf填充(因为是求max),目的是高效处理边界条件
dp[1][1] = arr[1][1]
# 状态计算
for i in range(2, n+1): # 因为i=1已经初始化,所以i从2开始遍历
for j in range(1,i+1):
dp[i][j] = max(dp[i-1][j-1]+arr[i][j], dp[i-1][j]+arr[i][j]) # 状态转移方程
res = float("-inf")
for i in range(1,n+1): # 遍历最后一行所有元素,取最大值作为输出结果
res = max(res, dp[n][i])
print(res)
特别感谢