题目:174.地下城游戏

class Solution {public int calculateMinimumHP(int[][] dungeon) {// 正向思维(自顶向下):走到任何一个位置时,血量都不能少于1并且到达终点时为1。// 最低初始健康点数(最小为1)a + 路径中血(增/减)逐个相加出现的最低值(负值)b >= 1// 但是从左上往右下的顺序注定a和b都会影响后续的决策。也就是说,这样的动态规划是不满足「无后效性」。// 逆向思维(自底向上):// 在每个路径上的点满足要求,最终求起点的血量,从终点(只剩1血)开始逐渐向左上角移动。由:// x-2 >= 1// x-2-3 >= 1// x-2-3+3 >= 1// x-2-3+3+1 >= 1// x-2-3+3+1-5 = 1 // 反过来:// x-2-3+3+1 = 1+5// x-2-3+3 = 1+5-1// x-2-3 = 1+5-1-3// x-2 = 1+5-1-3+3// x = 1+5-1-3+3+2 即 x = 7, 这样就无需考虑b且无后效性问题// dp[i][j] = max(min(dp[i+1][j], dp[i][j+1]) - dungeon[i][j], 1)int m = dungeon.length;int n = dungeon[0].length;int[][] dp = new int[m+1][n+1];Arrays.fill(dp[m], Integer.MAX_VALUE); // 数组批量赋值,只能一位数组for(int j=0; j<=m; j++)dp[j][n] = Integer.MAX_VALUE;dp[m-1][n] = 1;dp[m][n-1] = 1;for(int i=m-1; i>=0; i--)for(int 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);return dp[0][0];}
}

看到一位网友的C++代码也很简洁:

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--){dp[i][j]=max((min(dp[i+1][j],dp[i][j+1])-dungeon[i][j]),1);}}   return dp[0][0];}
};

leetcode174.地下城游戏相关推荐

  1. leetcode174. 地下城游戏(java)

    地下城游戏 leetcode174. 地下城游戏 题目描述 动态规划 解题思路 代码 动态规划专题 leetcode174. 地下城游戏 来源:力扣(LeetCode) 链接:https://leet ...

  2. LeetCode--174.地下城游戏(动态规划)

    地下城游戏(动态规划) 1. 题目描述 2. 题目分析 3. C语言实现 1. 题目描述 难度:困难 2. 题目分析 这道题是64.最小路径和的进阶版.但是这一题我们不能从左上向右下的顺序,而是**要 ...

  3. 力扣LeetCode174.地下城游戏及Python源码实现

    本题为LeetCode题库中第174题地下城游戏,难度困难,题目请参考这里. 一道比较困难DP题目,其中的难点在于如何定义状态转移方程,所以在这里记录一下.这道题刚开始做一点思路都没有,但是通过解读别 ...

  4. leetcode174. 地下城游戏(动态规划)

    一些恶魔抓住了公主(P)并将她关在了地下城的右下角.地下城是由 M x N 个房间组成的二维网格.我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主. 骑士的初始 ...

  5. Leetcode--174. 地下城游戏

    一些恶魔抓住了公主(P)并将她关在了地下城的右下角.地下城是由 M x N 个房间组成的二维网格.我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主. 骑士的初始 ...

  6. LeetCode174——地下城游戏

    我的LeetCode代码仓:https://github.com/617076674/LeetCode 原题链接:https://leetcode-cn.com/problems/dungeon-ga ...

  7. 【普通人题解】LeetCode174. 地下城游戏

    建议先看这个题 这个题 这个题,再看这个题. dfs 显然可以dfs,但是我们就不看了,因为大概率会超时. 动态规划 由于问题问初始的血量最低是多少,dp问题一般是最后一个状态作为输出值,所以对应的, ...

  8. LeetCode174. 地下城游戏

    动态规划,用dp[i][j]表示第i行第j列的格子到终点所需的最小初始值,这题如果从左上往右下递推,就需要同时记录从起点到当前位置的路径和以及从起点到当前位置所需要的最小初始值,比较麻烦. 因此我们可 ...

  9. 力扣174. 地下城游戏

    力扣174. 地下城游戏 文章目录 力扣174. 地下城游戏 一.题目描述 二.分析 三.完整代码 一.题目描述 二.分析 这个题一看就可以用动态规划,就需要确定动态规划的状态和选择以及状态转移方程 ...

  10. leetcode题库174 地下城游戏

    地下城游戏 一些恶魔抓住了公主(P)并将她关在了地下城的右下角.地下城是由 M x N 个房间组成的二维网格.我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主. ...

最新文章

  1. 算法结构2.希尔排序
  2. mysql 在存储过程出现的问题,记录一下
  3. PIE SDK点元素的绘制
  4. 微信公众号基本信息配置
  5. Scala函数的可变参数和参数默认值及带名参数
  6. boost::boost::directed_graph用法的测试程序
  7. MySql 连接报 SSL 警告问题
  8. 不同网段的远程控制脚本
  9. 经营你的iOS应用日志(二):异常日志
  10. macmini作为远程服务器,如何使用Macbook Pro远程免密码登录Mac mini
  11. python决策树分类案例_银行产品销售案例与决策树分类算法
  12. 网站建设解决了传统的销售模式
  13. 毕业工具大全:开题、答辩、格式排版等stata、spss等多种统计软件、绘图软件(附送教学视频)超200G资料
  14. 根据四个特征点求解相机位姿
  15. CSU 1725 加尔鲁什·地狱咆哮对阵虚灵大盗拉法姆(dp)
  16. 安卓一键清理内存_雨点清理安卓版下载-雨点清理官方版下载v1.0
  17. 微信小程序-扫码点餐系统设计
  18. 阿尔兹海默症AD最新研究进展(2021年7月)
  19. python怎么算一元二次方程_Python求一元二次方程解
  20. Debian 修改系统语言

热门文章

  1. JavaScript之“创意时钟”项目
  2. 破解第三课 关键跳和关键CALL
  3. 写贺卡给毕业师姐怎么写计算机系的,师哥送下一届毕业的寄语
  4. Tcl/Tk快速入门
  5. itunes计算机丢失,itunes怎么找不到app store了 最新版itunes app store在哪
  6. 施密特正交化过程编程c语言,利用C程序编写格拉姆-施密特正交化的过程.docx
  7. AR技术从无到有浅谈AR市的未来场发展
  8. 形容词记忆(六):ive, ile, ary后缀常用词
  9. python科技新闻爬取
  10. 交换机之恢复重置设备密码