LeetCode 174 地下城遊戲

2021-09-18 07:13:03 字數 1104 閱讀 3956

一些惡魔抓住了公主(p)並將她關在了地下城的右下角。地下城是由 m x n 個房間組成的二維網格。我們英勇的騎士(k)最初被安置在左上角的房間裡,他必須穿過地下城並通過對抗惡魔來拯救公主。

騎士的初始健康點數為乙個正整數。如果他的健康點數在某一時刻降至 0 或以下,他會立即死亡。

有些房間由惡魔守衛,因此騎士在進入這些房間時會失去健康點數(若房間裡的值為負整數,則表示騎士將損失健康點數);其他房間要麼是空的(房間裡的值為 0),要麼包含增加騎士健康點數的魔法球(若房間裡的值為正整數,則表示騎士將增加健康點數)。

為了盡快到達公主,騎士決定每次只向右或向下移動一步。

編寫乙個函式來計算確保騎士能夠拯救到公主所需的最低初始健康點數。

例如,考慮到如下布局的地下城,如果騎士遵循最佳路徑右 -> 右 -> 下 -> 下,則騎士的初始健康點數至少為7

說明:

此題是標準動態規劃題。需要建立乙個二維dp陣列。而且dp陣列的建立過程是從陣列的右下角到陣列的左上角,最後返回dp陣列左上角的值。dp陣列中的每乙個元素都代表剛到達當前格仔時生命值最低為多少,可以最終到達右下角救出公主。陣列的行數為m,列數為n。首先dp[m-1][n-1]等於max(1 - dungeon[m-1][n-1], 1),然後建立dp陣列的最右邊一列,再建立dp陣列的最下邊的一行。接下來從dp[m-2][n-2]開始給dp陣列填充元素,狀態轉移方程是dp[i][j] = max(min(dp[i+1][j], dp[i][j+1]) - dungeon[i][j], 1),就是說dp[i][j]等於他右邊格仔的最低所需生命值和下邊格仔的最低所需生命值中較小的那個值,減去當前格仔的dungeon數,就得到剛到該格仔時最低所需生命值,但是還要把他和1取較大的那個,這樣生命值才不會出現負數才是合理的。如此迴圈當最終dp陣列全部填充完畢後,返回dp[0][0]。

class solution 

};

LeetCode174 地下城遊戲

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

Leetcode 174 地下城遊戲

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

leetcode 174 地下城遊戲

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