int calculateMinimumHP(vector<vector<int> > &dungeon) {
int m = dungeon.size();
int n = dungeon[0].size();
vector<vector<int>> results;
for (int i = 0; i < m; i++){
results.push_back(vector<int>(n, 0));
}
for (int i = m - 1; i >= 0; i--){
for (int j = n - 1; j >= 0; j--){
int cur = dungeon[i][j];
int nbour = 0;
if ((j+1)<n && (i+1)<m){
nbour = min(results[i + 1][j], results[i][j + 1]);
}
else if ((j+1)>=n && (i+1)<m){
nbour = results[i + 1][j];
}
else if((j+1)<n && (i+1)>=m){
nbour = results[i][j + 1];
}
else{
nbour = 1;
}
int tmp = cur - nbour;
results[i][j] = (tmp >= 0) ? 1 : -tmp;
}
}
return results[0][0];
}
LeetCode的difficulty标的真不准。。。