leetcode-174-地下城游戏

题目描述:

 

 

 

 方法一:动态规划 O(mn) O(mn)

class Solution:
    def calculateMinimumHP(self, dungeon: List[List[int]]) -> int:
        rows = len(dungeon)
        cols = len(dungeon[0])
        dp = [[1]*cols for _ in range(rows)]
        for x in range(cols-1,-1,-1):
            for y in range(rows-1,-1,-1):
                if x==cols-1 and y==rows-1:
                    dp[y][x] = max(1,1-dungeon[y][x])
                    continue
                if x==cols-1:
                    dp[y][x] = max(1,dp[y+1][x]-dungeon[y][x])
                    continue
                if y==rows-1:
                    dp[y][x] = max(1,dp[y][x+1]-dungeon[y][x])
                    continue
                dp[y][x] = min(max(1,dp[y+1][x]-dungeon[y][x]),max(1,dp[y][x+1]-dungeon[y][x]))
        return dp[0][0]

官方:

class Solution:
    def calculateMinimumHP(self, dungeon: List[List[int]]) -> int:
        n, m = len(dungeon), len(dungeon[0])
        BIG = 10**9
        dp = [[BIG] * (m + 1) for _ in range(n + 1)]
        dp[n][m - 1] = dp[n - 1][m] = 1
        for i in range(n - 1, -1, -1):
            for j in range(m - 1, -1, -1):
                minn = min(dp[i + 1][j], dp[i][j + 1])
                dp[i][j] = max(minn - dungeon[i][j], 1)

        return dp[0][0]

 

posted @ 2020-07-13 21:59  oldby  阅读(206)  评论(0编辑  收藏  举报