8.14 - hard - 39

174. Dungeon Game

这道题很有意思,是从后往前的dp,这道题其实一看就知道是dp,不过要从后往前去做还是有点难想到的。

class Solution(object):
    def calculateMinimumHP(self, dungeon):
        """
        :type dungeon: List[List[int]]
        :rtype: int
        """
        # dp[i][j] the minimum hp for i,j to go to the last block
        if not dungeon:
            return 0
        d = dungeon
        m = len(d)
        n = len(d[0])
        dp = [[sys.maxint for _ in range(n)] for _ in range(m)]
        dp[m-1][n-1] = max(1, 1-d[m-1][n-1])
        # initialize
        for i in range(m-2, -1, -1):
            dp[i][n-1] = max(1, dp[i+1][n-1] - d[i][n-1])
        for j in range(n-2, -1, -1):
            dp[m-1][j] = max(1, dp[m-1][j+1] - d[m-1][j])
        
        # loop
        for i in range(m-2, -1, -1):
            for j in range(n-2, -1, -1):
                down = max(1, dp[i+1][j] - d[i][j])
                right = max(1, dp[i][j+1] - d[i][j])
                dp[i][j] = min(down, right)
        
        return dp[0][0]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,350评论 0 33
  • LeetCode 刷题随手记 - 第一部分 前 256 题(非会员),仅算法题,的吐槽 https://leetc...
    蕾娜漢默阅读 18,120评论 2 36
  • 最近的口头禅是“生无可恋”,人生活在这个世界上连吃都不能满足的时候,这样的囧景,滋生你求生的欲望更强,反而是那种不...
    一棵无心的柳树阅读 2,833评论 0 0
  • 前言 xxvii 1 准备好了 1 2 介绍C 27 3 数据和C 55 4 字符串和格式化输...
    Kelvin_Yip阅读 2,662评论 0 1
  • 在太平洋接近赤道的地方,一只金红的鱼儿欢快地在水中游着。附近的小岛在大海中就像蓝宝石中的翡翠。一群飞鸟迁徙到了...
    麋鹿笔记阅读 1,768评论 0 1