174 地下城遊戲

2021-10-22 15:53:20 字數 739 閱讀 1569

int

calculateminimumhp

(int

** dungeon,

int dungeonsize,

int* dungeoncolsize)

for(

int i = line-

2; i >=

0; i--

)for

(int i = row-

2; i >=

0; i--)}

return dungeon[0]

[0]>0?

1:-dungeon[0]

[0]+

1;//生命值需要大於0

}

思路:動態規劃

這也一道使用動態規劃求解的題目,一開始思考從左上角開始記錄狀態,但是需要的生命最少值與路徑和最少發生衝突,這樣狀態轉移方程就無法得出。那就思考從右下角開始計算:

使用dp[i][j] 表示從座標(i,j)到右下角的最小生命值-1的負數,這裡使用負數記錄dp陣列。

狀態轉移方程:dp[i][j] = fmax(dungeon[i+1][j], dungeon[i][j+1]) + dungeon[i][j];

dungeon[i][j] = dungeon[i][j] > 0 ? 0 : dungeon[i][j] (本數值大於表明這個房間的值可以直接支撐騎士走到公主身邊)

最後dp[0][0] 表示從座標(0,0)到右下角的最小生命值-1的負數

174 地下城遊戲

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

174 地下城遊戲

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

174 地下城遊戲

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