174. 地下城游戏 -- 动规

174. 地下城游戏

python 复制代码
class CalculateMinimumHP:
    """
    174. 地下城游戏
    https://leetcode.cn/problems/dungeon-game/
    """
    def solution(self, dungeon: List[List[int]]) -> int:
        # 我们想计算左上⻆到右下⻆所需的最⼩⽣命值
        m, n = len(dungeon), len(dungeon[0])
        self.memo = [[-1 for _ in range(n)] for _ in range(m)]
        return self.dp(dungeon, 0, 0)

    def dp(self, grid, i, j):
        """
        从 grid[i][j] 到达终点(右下⻆)所需的最少⽣命值
        :param grid:
        :param i:
        :param j:
        :return:
        """
        m, n = len(grid), len(grid[0])
        # base case
        if i == m - 1 and j == n - 1:
            return 1 if grid[i][j] >= 0 else -grid[i][j] + 1

        if i == m or j == n:
            return float('inf')

        if self.memo[i][j] != -1:
            return self.memo[i][j]

        res = min(self.dp(grid, i, j+1),
                  self.dp(grid, i+1, j)) - grid[i][j]

        self.memo[i][j] = 1 if res <= 0 else res
        return self.memo[i][j]
相关推荐
wzdark5 小时前
基于矩阵的动态规划路径问题性能优化4
线性代数·矩阵·动态规划
find1star3 天前
LeetCode 25:K 个一组翻转链表
java·数据结构·算法·leetcode·链表·职场和发展·动态规划
chushiyunen3 天前
动态规划、贪心算法、分治法
算法·贪心算法·动态规划
梓䈑3 天前
【动态规划系列】路径问题、子数组 和 子序列问题、背包问题
c++·算法·动态规划
微功夫信息技术4 天前
分层多智能体强化学习驱动的非急救转运公平 - 效率统一调度系统研究与实践
人工智能·学习·算法·动态规划
辰烨chenye6 天前
LeetCode Hot 100 题解 · 动态规划篇
算法·leetcode·动态规划
a187927218316 天前
【算法】动态规划第四篇:背包收官——min 哨兵、计数世界与组合排列分水岭
算法·leetcode·动态规划·dp·01背包·算法讲解·决策合并
a187927218317 天前
【算法】动态规划第三篇:背包第一课——贪心之死与正序倒序开关
算法·leetcode·动态规划·贪心·dp·暴力·算法讲解
a187927218317 天前
【算法】动态规划第五篇:区间 DP——从“看什么都像背包“到“最后戳谁“
算法·leetcode·动态规划·dp·区间·区间dp·算法讲解
rannn_1117 天前
【力扣hot100】多维动态规划|62、64、5、1143、72
算法·leetcode·动态规划