思路:動態規劃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 或以下,他會立即死亡。有些房間由惡魔守衛,因...