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]
相关推荐
袁雅倩19974 小时前
当吸尘器、筋膜枪都用上Type-C,供电方案该怎么选?浅谈PD取电芯片ECP5702的应用
c语言·开发语言·支持向量机·动态规划·推荐算法·最小二乘法·图搜索算法
workflower11 小时前
从拿订单到看方向
大数据·人工智能·设计模式·机器人·动态规划
workflower15 小时前
企业酝酿数智化内驱力
大数据·人工智能·设计模式·机器人·动态规划
是wzoi的一名用户啊~18 小时前
Floyd 模版 弗洛伊德算法 模版
c++·算法·动态规划·图论·floyd
故事和你9119 小时前
蓝桥杯-2026年C++B组省赛
开发语言·数据结构·c++·算法·蓝桥杯·动态规划·图论
我是无敌小恐龙1 天前
Java基础入门Day10 | Object类、包装类、大数/日期类、冒泡排序与Arrays工具类 超详细总结
java·开发语言·数据结构·算法·贪心算法·排序算法·动态规划
cheems95271 天前
[算法手记] 动态规划,二叉树计数问题
算法·动态规划
样例过了就是过了1 天前
LeetCode热题100 编辑距离
数据结构·c++·算法·leetcode·动态规划
khalil10201 天前
代码随想录算法训练营Day-46 动态规划13 | 647. 回文子串、516.最长回文子序列、动态规划总结
数据结构·c++·算法·leetcode·动态规划·回文子串·回文子序列
开开心心就好2 天前
支持音视频图片文档的格式转换器
人工智能·学习·游戏·决策树·音视频·动态规划·语音识别