wrong many times, I should make a clear clue before write the code.
class Solution {
public:
int calculateMinimumHP(vector<vector<int>>& dungeon) {
int n = dungeon.size();
if (n == 0) {
return 1;
}
int m = dungeon[0].size();
if (m == 0) {
return 1;
}
dungeon[n - 1][m - 1] = max(1, 1 - dungeon[n - 1][m - 1]);
for (int i = n - 1; i >= 0; --i) {
for (int j = m - 1; j >= 0; --j) {
if (i == n - 1 && j == m - 1) {
continue;
}
int right = INT_MAX, down = INT_MAX;
if (i < n - 1) {
down = dungeon[i + 1][j];
}
if (j < m - 1) {
right = dungeon[i][j + 1];
}
dungeon[i][j] = max(1, min(right, down) - dungeon[i][j]);
}
}
return dungeon[0][0];
}
};