class Solution:
def calculateMinimumHP(self, dungeon: List[List[int]]) -> int:
m = len(dungeon)
n = len(dungeon[0])
dp = [[0]* n for _ in range(m)]
for i in range(m-1,-1,-1):
for j in range(n-1,-1,-1):
if i == m-1 and j == n-1:
dp[i][j] = max(0,-dungeon[i][j])
elif j == n-1:
need = dp[i+1][j] - dungeon[i][j]
dp[i][j] = max(0,need)
elif i == m-1:
need = dp[i][j+1] - dungeon[i][j]
dp[i][j] = max(0,need)
else:
need = min(dp[i+1][j],dp[i][j+1])-dungeon[i][j]
dp[i][j] = max(0,need)
return dp[0][0] + 1
每日一道Leetcode - 174. 地下城游戏 [反向动态规划|路径]
最新推荐文章于 2025-02-18 18:19:36 发布