思路
這道題從前往後要同時保證當前房間最低血量和路徑最低血量。所以倒著來,從後往前,這樣只需要保證房間最低學量,因為路徑最低血量不管是多少都能到達最後終點(從終點來的)
動態轉移方程:dp[i][j]=max(min(dp[i+1][j],dp[i][j+1])−dungeon(i,j),1)
最終答案即為 dp[0][0]
邊界條件為,dp[n−1][m−1] 轉移需要用到的 dp[n-1][m]和 dp[n][m-1]均為無效值,因此我們給這兩個值賦值為 1
ps:其實這題裡面因為要求是正整數所以才max(…,1),換成0最後+1也一眼。
**:
class solution:
def calculateminimumhp(self, dungeon: list[list[int]]) -> int:
n, m = len(dungeon), len(dungeon[0])
big = 10**9
dp = [[big] * (m + 1) for _ in range(n + 1)]
dp[n][m - 1] = dp[n - 1][m] = 1
for i in range(n - 1, -1, -1):
for j in range(m - 1, -1, -1):
minn = min(dp[i + 1][j], dp[i][j + 1])
dp[i][j] = max(minn - dungeon[i][j], 1)
return dp[0][0]
時間複雜度:o(n×m),其中 n,mn,m 為給定矩陣的長寬。
空間複雜度:o(n×m),其中 n,mn,m 為給定矩陣的長寬,注意這裡可以利用滾動陣列進行優化,優化後空間複雜度可以達到 o(n)o(n)。
近期錯題總結
怎麼這樣一看感覺自己也沒多少一遍過的題啊 悲 過於久遠的就不往上放了.不是洛谷題庫的題有些找不到或記不住是不是一遍過了 kk lgp1450 硬幣購物 容斥列舉加減的時候少寫了一種情況。lgp7076 動物園 沒特判 爆 long long 判斷條件寫反。lgp2801 教主的魔法 build 函式...
測試 錯題總結
構造方法方法名與類名必須相同,並且沒有返回值,在物件建立時被呼叫 可以有帶參和無參的構造方法同時出現於乙個類。因此,答案是a onscroll事件 通常情況下指上下滾動條滾動 b 選項中邏輯錯誤是指 邏輯問題,所以不能處理 c 選項中語法錯誤是指 的通用性不規範 d 選項中內部錯誤是指程式中錯誤,所...
PHP測試錯題總結
一 選擇題 1 語句for 和語句for 執行的次數分別是 b a 0和無限 b 無限和0 c 都是0 d 都是無限 解析 題中第乙個for迴圈中 k 1,而第二個for迴圈中 k 1 乙個等於號是賦值,兩個等於號是等於。2 在陣列的末尾新增陣列元素的函式是 d a array pop b arra...