状态表示:从该点到终点的最少生命点数
思路:从右下角向左上角赋值,初始值定为无穷大,思路为取右侧和下侧格子里面最少的生命值再
减去该格子中的值,如果出现负数即血包大于损耗时赋值为1,即无明显条件限制
class Solution {
public:
int calculateMinimumHP(vector<vector<int>>& dungeon) {
int n = dungeon.size(), m = dungeon[0].size();
vector<vector<int>> dp(n+1, vector<int>(m+1, INT_MAX));
dp[n][m-1]=dp[n-1][m]=1;
for(int i=n-1;i>=0;i--)
{
for(int j=m-1;j>=0;j--)
{
int minn=min(dp[i+1][j],dp[i][j+1]);
dp[i][j]=max(1,minn-dungeon[i][j]);
}
}
return dp[0][0];
}
};