leetcode :Binary Search:Dungeon Game(174)

原创 2016年08月28日 16:14:51

The demons had captured the princess (P) and imprisoned her in the bottom-right corner of a dungeon. The dungeon consists of M x N rooms laid out in a 2D grid. Our valiant knight (K) was initially positioned in the top-left room and must fight his way through the dungeon to rescue the princess.

The knight has an initial health point represented by a positive integer. If at any point his health point drops to 0 or below, he dies immediately.

Some of the rooms are guarded by demons, so the knight loses health (negative integers) upon entering these rooms; other rooms are either empty (0’s) or contain magic orbs that increase the knight’s health (positive integers).

In order to reach the princess as quickly as possible, the knight decides to move only rightward or downward in each step.

Write a function to determine the knight’s minimum initial health so that he is able to rescue the princess.

For example, given the dungeon below, the initial health of the knight must be at least 7 if he follows the optimal path RIGHT-> RIGHT -> DOWN -> DOWN.


-2 (K)  -3  3
-5  -10 1
10  30  -5 (P)

class Solution {
    public:
        int calculateMinimumHP(vector<vector<int> > &dungeon) {
            int row = dungeon.size();
            int col = row>0 ? dungeon[0].size() : 0;
            if (row<=0 || col <=0) return 0;

            //dp[r][c] = min( max( dp[r+1][c] - dungeon[r][c], 1), max( dp[r][c+1] - dungeon[r][c], 1) );
            int dp[row][col];
            memset(dp, 0, sizeof(dp));

            for(int r=row-1; r>=0; r--){
                for (int c=col-1; c>=0; c--){

                    /*if (r == row - 1 && c == col - 1 ){
                      dp[r][c] = max(1 - dungeon[r][c], 1);
                      }else if ( r == row - 1 ) {
                      dp[r][c] = max(dp[r][c+1] - dungeon[r][c], 1);
                      }else if ( c == col - 1 ) {
                      dp[r][c] = max(dp[r+1][c] - dungeon[r][c], 1);
                      }else{
                      dp[r][c] = min( max( dp[r+1][c] - dungeon[r][c], 1), max( dp[r][c+1] - dungeon[r][c], 1) );
                      }*/

                    if (r == row - 1 && c == col - 1 ){
                        dp[r][c] = max(1 - dungeon[r][c], 1);
                    }else{ 
                        int h1 = ( c == col-1  ) ? INT_MAX : max(dp[r][c+1] - dungeon[r][c], 1);
                        int h2 =  ( r == row-1 ) ? INT_MAX : max(dp[r+1][c] - dungeon[r][c], 1);

                        dp[r][c] = min( h1, h2 );
                    }

                }
            }

            return dp[0][0];


        }
};
版权声明:本文为博主原创文章,未经博主允许不得转载。

算法学习之动态规划(leetcode 174. Dungeon Game)

leetcode 174. Dungeon Game The demons had captured the princess (P) and imprisoned her in the botto...

[leetcode 174] Dungeon Game

The demons had captured the princess (P) and imprisoned her in the bottom-right corner of a dungeon....

LeetCode-174.Dungeon Game

https://leetcode.com/problems/dungeon-game/ The demons had captured the princess (P) and impris...

Leetcode——174. Dungeon Game

本周做了一个动态规划的题目:Dungeon Game 题目描述 The demons had captured the princess (P) and imprisoned her in the...

[leetcode] 174. Dungeon Game 解题报告

题目链接:https://leetcode.com/problems/dungeon-game/ The demons had captured the princess (P) and impr...

[Leetcode] 174. Dungeon Game 解题报告

题目: The demons had captured the princess (P) and imprisoned her in the bottom-right corner of a...

Leetcode—174. Dungeon Game 倒序DP

问题描述: The demons had captured the princess (P) and imprisoned her in the bottom-right corner of a ...

[LeetCode]problem 174. Dungeon Game

TAG动态规划link方法标准DP问题,没有太大思考难度。不过还是在纸上画了一会了,写出了需要满足的条件,结果觉得还是直接直观理解更加简单。明显需要倒推。首先是最后一个格子。到达这个格子之前,K至少有...

Leetcode 174. Dungeon Game (Hard) (cpp)

Leetcode 174. Dungeon Game (Hard) (cpp)
  • Niko_Ke
  • Niko_Ke
  • 2016年11月16日 11:37
  • 228

Leetcode.174 Dungeon Game |算法解析——动态规划

原题:The demons had captured the princess (P) and imprisoned her in the bottom-right corner of a dunge...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:leetcode :Binary Search:Dungeon Game(174)
举报原因:
原因补充:

(最多只允许输入30个字)