美文网首页
Leetcode-174-Dungeon Game

Leetcode-174-Dungeon Game

作者: 单调不减 | 来源:发表于2019-05-24 09:21 被阅读0次

    题意简单说来就是给定M*N的方格,每个格子里的数字代表HP值增减的数量,从左上角格子出发,每一步向右或向下走,走到右下角格子,要求路程中HP不低于1(否则死亡),问出发时HP值最小是多少。

    这是典型的DP问题。但需要注意DP的方向应该是从右下角向左上角,而不是相反。这道题我们需要考虑的过程是这样的,要求出发时最小的HP值,我们只需要到达右下角的HP值为1即可(当然也可以大于1,如果格子中是正数),接下来我们从右下到左上做DP,每一步记录到当前格子所需最小的HP值,记为dp[i][j]若出现dp[i][j]\leq 0的情形(即所需最小HP为负),只需要更新其值为1即可(这是题目的要求)。

    代码如下:

    class Solution {
    public:
        int calculateMinimumHP(vector<vector<int>>& dungeon) {
            int m=dungeon.size();
            int n=dungeon[0].size();
            
            vector<vector<int>> dp(m+1,vector<int>(n+1,INT_MAX));
            dp[m-1][n]=dp[m][n-1]=1;
            for(int i=m-1;i>=0;i--)
                for(int j=n-1;j>=0;j--)
                    dp[i][j]=(min(dp[i+1][j],dp[i][j+1])-dungeon[i][j])<=0?1:(min(dp[i+1][j],dp[i][j+1])-dungeon[i][j]);
            return dp[0][0];
        }
    };
    

    相关文章

      网友评论

          本文标题:Leetcode-174-Dungeon Game

          本文链接:https://www.haomeiwen.com/subject/bhuwzqtx.html