-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathleetcode174.cpp
28 lines (27 loc) · 1002 Bytes
/
leetcode174.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution {
public:
int calculateMinimumHP(vector<vector<int>>& dungeon) {
if(dungeon.size() == 0)
return 0;
int col = dungeon[0].size(),row = dungeon.size();
vector<vector<int>>dp(row,vector<int>(col,0x3f3f3f3f));
dp[row-1][col-1] = 1;
if(dungeon[row-1][col-1] >= 0)
dungeon[row-1][col-1] = 0;
for(int i = col-2 ; i>= 0 ; i--){
dp[row-1][i] = dp[row-1][i+1]-dungeon[row-1][i+1];
dp[row-1][i] = max(dp[row-1][i],1);
}
for(int i = row-2 ; i >= 0; i--){
dp[i][col-1] = dp[i+1][col-1] - dungeon[i+1][col-1];
dp[i][col-1] = max(dp[i][col-1],1);
}
for(int i = row-2 ; i >= 0 ; i--){
for(int j = col-2 ; j>=0 ; j--){
dp[i][j] = min(dp[i][j+1]-dungeon[i][j+1],dp[i+1][j]-dungeon[i+1][j]);
dp[i][j] = max(dp[i][j],1);
}
}
return max(dp[0][0]-dungeon[0][0],1);
}
};