动态规划
注意一个最重要的条件,如果勇士的血量小于1,那么英雄就挂了,所以转移方程 dp[i][j]=max(min(dp[i+1][j],dp[i][j+1])−dungeon(i,j),1)
。也就是说勇士的血量最小都要是1,保证勇士能够活着见到公主。
// @lc code=start
/**
* @param {number[][]} dungeon
* @return {number}
*/
var calculateMinimumHP = function(dungeon) {
const m = dungeon.length;
const n = dungeon[0].length;
let dp = new Array(m + 1);
for (let i = 0; i < m + 1; i++) {
dp[i] = new Array(n + 1).fill(Infinity);
}
// 最后勇士还活着
dp[m][n - 1] = 1;
dp[m - 1][n] = 1;
for (let i = m - 1; i >= 0; i--) {
for (let j = n - 1; j >= 0; j--) {
dp[i][j] = Math.max(Math.min(dp[i + 1][j], dp[i][j + 1]) - dungeon[i][j], 1);
}
}
console.log(dp);
return dp[0][0];
};
// @lc code=end
感谢观看 期待关注
关注我,带你一起写bug
warning :版权所有,转载请注明
有问题的小伙伴请在下方留言,喜欢就点个赞吧