【pythonHard174leetcode】Dungeon Game

xiaoxiao2025-10-03  8

题目

https://leetcode.com/problems/dungeon-game/

基本思路

动态规划(基本上难题都是动态规划问题,一定要好好掌握啊~) 从下向上计算(正着去救公主,我们就倒着求解) 还有一点要注意是,骑士无论到那个位置,必须健康值为1。 动态规划转换方程如下:

dp[i][j] = min(dp[i+1][j] - dungeon[i][j], dp[i][j+1] - dungeon[i][j]) dp[i][j] = max(dp[i][j], 1) # 要保证健康值至少为 1

实现代码

class Solution(object): def calculateMinimumHP(self, dungeon): """ :type dungeon: List[List[int]] :rtype: int """ row,col = len(dungeon),len(dungeon[0]) dp = [[0]*col for _ in range(row)] dp[-1][-1] = max(1,1-dungeon[-1][-1]) # 最后一列 for i in range(row-2,-1,-1): dp[i][col-1] = max(1,dp[i+1][col-1]-dungeon[i][col-1]) # 最后一行 for j in range(col-2,-1,-1): dp[row-1][j] = max(1,dp[row-1][j+1]-dungeon[row-1][j]) # 填充其他的 for i in range(row-2,-1,-1): for j in range(col-2,-1,-1): dp[i][j] = max(1,min(dp[i+1][j]-dungeon[i][j],dp[i][j+1]-dungeon[i][j])) return dp[0][0]
转载请注明原文地址: https://www.6miu.com/read-5037302.html

最新回复(0)