Dungeon Game

来源:互联网 发布:编程数字金字塔 编辑:程序博客网 时间:2024/06/07 10:38

Dungeon Game - LeetCode

题目:
这里写图片描述
这里写图片描述


这又是一道动态规划的题目。
一开始的想法是用一个二维数组记录在(i,j)位置所能剩下的最大生命值,但是这是不对的。
后来想到了另一种方法,从右下角开始推,在(i,j)位置记录所需要的最小生命值。然后往起点推。
在走到最后一格后,只需要剩下一滴血就可以,虽然事实上可能剩下很多血,但是剩一滴血是满足条件的最小血量,这是个必要条件。往回推的时候也是每次都找到一个不死的必要血量,然后只要保持这个必要血量就能够得出在起点所需要的最少血量。

class Solution {public:    int calculateMinimumHP(vector<vector<int>>& dungeon) {        int m = dungeon.size();        int n = dungeon[0].size();        vector< vector<int> > a(m+1, vector<int>(n+1,9999));        a[m][n-1] = 1;        a[m-1][n] = 1;        for (int i = m-1; i >= 0; i--) {            for (int j = n-1; j >= 0; j--) {                int temp = min(a[i+1][j], a[i][j+1]);                if (dungeon[i][j] < temp) {                    a[i][j] = temp-dungeon[i][j];                } else {                    a[i][j] = 1;                }            }        }        return a[0][0];    }};
原创粉丝点击