174 地下城遊戲 逆向動態規劃

2021-10-08 01:57:04 字數 1174 閱讀 6730

難度:困難

2020/7/12每日一題打卡√

題目描述

解題思路

這個月好多動態規劃的題,這道題也長得就很動態規劃,每一步都跟前一步有關。

但是這個不能像普通的那樣從左上角走到右下角,因為這樣的法沒法得到最小值,因為後面會出現什麼數字,正數還是負數是無法預知的。正確的做法是從右下角元素開始,依次計算到達這個位置需要的健康點數最小值,然後遞推到左上角開始元素。

以題目例子 -2 -3 3

-5 -10 1

10 30 -5 為例,首先看-5,因為扣除後健康點必須大於0,所以要想順利救出公主,進入這個格仔的時候健康點必須大於等於6,所以這個點就是6;

然後這個位置可以是從上面來,也可以是從左邊來,先初始化最右邊那列:1的位置,要加上1後大於等於6,所以進到這個位置必須大於等於5,取最小值就是5;3這個位置,同理應該是2;

初始化最下面那一行,有個需要注意的細節就是,如果是正數,那麼進入需要的健康點是多少。需要進行比較,最小肯定是1,如果加上當前正數之後大於前乙個需要的健康點,比如30,大於最後乙個位置需要的6,那麼到這點的時候只要滿足最低要求1就可以了。變成**就是

dp[m-1][i] = math.max(1,dp[m-1][i+1] - dungeon[m-1][i]);

/*

* 174. 地下城遊戲

* 2020/7/12每日一題打卡

* dp[i][j]表示這個地方需要的最小能量值,從右下角往上倒推

*/public

intcalculateminimumhp

(int

dungeon)

for(

int i = n-

2; i >=

0; i--

)//從右下角往左上角填表

174 地下城遊戲

一些惡魔抓住了公主 p 並將她關在了地下城的右下角。地下城是由 m x n 個房間組成的二維網格。我們英勇的騎士 k 最初被安置在左上角的房間裡,他必須穿過地下城並通過對抗惡魔來拯救公主。騎士的初始健康點數為乙個正整數。如果他的健康點數在某一時刻降至 0 或以下,他會立即死亡。有些房間由惡魔守衛,因...

174 地下城遊戲

174.地下城遊戲 一些惡魔抓住了公主 p 並將她關在了地下城的右下角。地下城是由 m x n 個房間組成的二維網格。我們英勇的騎士 k 最初被安置在左上角的房間裡,他必須穿過地下城並通過對抗惡魔來拯救公主。騎士的初始健康點數為乙個正整數。如果他的健康點數在某一時刻降至 0 或以下,他會立即死亡。有...

174 地下城遊戲

一些惡魔抓住了公主 p 並將她關在了地下城的右下角。地下城是由 m x n 個房間組成的二維網格。我們英勇的騎士 k 最初被安置在左上角的房間裡,他必須穿過地下城並通過對抗惡魔來拯救公主。騎士的初始健康點數為乙個正整數。如果他的健康點數在某一時刻降至 0 或以下,他會立即死亡。有些房間由惡魔守衛,因...