题目
代码
def cal():
n = int(input())
matrix = []
for _ in range(n):
matrix.append(list(map(int, input().split())))
m = n + 1
dp = [[0] * m for _ in range(m)]
path = [[0] * m for _ in range(m)]
for i in range(1, m):
for j in range(1, i + 1):
dp[i][j] += matrix[i - 1][j - 1]
if dp[i - 1][j - 1] > dp[i - 1][j]:
path[i][j] = path[i - 1][j - 1] - 1
dp[i][j] += dp[i - 1][j - 1]
else:
if i == 1 and j == 1:
path[i][j] == 0
else:
path[i][j] = path[i - 1][j] + 1
dp[i][j] += dp[i - 1][j]
ans = 0
dp = dp[-1][1:]
path = path[-1][1:]
for i in range(n):
if abs(path[i]) == 1 or abs(path[i]) == 0:
ans = max(ans, dp[i])
return ans
out = cal()
print(out)
评测
试题解析
动态规划,当初水平有限没做出来,喊了个老铁做,他的得分是80,帮他捉了点小虫就对了。
传送门:蓝桥杯动态规划练习题–数字三角形