有大lao能帮我分析下题目以及我贴出的代码吗?感激不尽!
或者直接回答我最直接的一个疑问就是:
为什么是减而不是加(也就是为啥向上和左走),我搞不清楚其中的逻辑
迷迷糊糊的
x = i - dx # 为啥是减,计算上一步的权值?
y = j - dy
# 跳跃
n,m = map(int,input().split())
dp = [list(map(int,input().split())) for _ in range(n)]
index_move = [(0,1),(0,2),(0,3),(1,0),(2,0),(3,0),(1,2),(2,1),(1,1)] # 只可以往右和下走
# 为啥(2,2)不可以? ---> 貌似是出题人的问题,不用计较
for i in range(n):
for j in range(m):
res = [] # 存储下一步能走的位置的权值
for dx, dy in index_move:
# 向上/左
x = i - dx # 为啥是减,计算上一步的权值?逆向操作吗?
y = j - dy
if 0 <= x < n and 0 <= y < m:
res.append(dp[x][y])
dp[i][j] += max(res) if res else 0 # 添加权值最大值(每次走的这一步都是最优解)
for k in dp:
print(k)
print()
print(dp[-1][-1])