【分析】这道题一看就是动态规划,最开始从左上角往右下走,每次判断右侧和下侧哪个数大就走哪个方向,但是这样想的话就会有一个问题,就是我们需要判断每次到达一个房间后,我们的血量不能是负数。而问题的关键是骑士的初始值是未知量!!比如上面这个例子,如果按照这个策略最后得到的就是28,不是7。因此我们换个角度,从下往上倒退。

状态定义:

f(x, y) -------- 到达坐标(x, y)前骑士所需的最低血量值

dungeon[x][y] :值的是(x,y)这个位置能给英雄提供的血量

状态转移:

如何求f(x,y)?  掌握了上面的状态定义,就很简单了,小学数学问题:到达当前位置(x,y) 所需要的最低血量 = 下一个位置需要的最低血量(min(dp[i + 1][j], dp[i][j + 1]) )- (x,y)这个位置能给英雄提供的血量(dungeon[x][y]);

如果差值小于等于0,说明(x,y)位置的血量为大于等于min(dp[i + 1][j], dp[i][j + 1])的一个正数,也就是这个位置提供的能量足够下个位置消耗了,所以到达当前位置(x,y)的最低生命值 1 就能满足要求。如果大于零,则说明当前位置提供的还不够,差值就是到达当前位置骑士还必须保存的血量。

注意先把最后一行和最后一列算出来。

【代码】

class Solution {
public:int calculateMinimumHP(vector<vector<int>>& dungeon) {int m = dungeon.size();//行数int n = dungeon[0].size();//列数int dp[m][n];dp[m-1][n-1] = dungeon[m-1][n-1] >= 0 ? 1 : abs(dungeon[m-1][n-1]) + 1;//到达公主房间之前最低应该有的血量for(int i = m - 2; i >= 0; i--){int temp = dp[i + 1][n - 1] - dungeon[i][n - 1];dp[i][n - 1] = temp <= 0 ? 1 : temp;}for(int i = n - 2; i >= 0; i--){int temp = dp[m - 1][i + 1] - dungeon[m - 1][i];dp[m - 1][i] = temp <= 0 ? 1 : temp;}for(int i = m - 2; i >= 0; i--){for(int j = n - 2; j >= 0; j--){int temp = min(dp[i + 1][j], dp[i][j + 1]) - dungeon[i][j];dp[i][j] = temp <= 0 ? 1 : temp;}}return dp[0][0];}
};

leetcode 174:地下城游戏相关推荐

  1. LeetCode 174.地下城游戏

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

  2. LeetCode 174. 地下城游戏 | Python

    文章目录 174. 地下城游戏 题目 解题思路 代码实现 实现结果 欢迎关注 174. 地下城游戏 题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/ ...

  3. Java实现 LeetCode 174 地下城游戏

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

  4. LeetCode 174. 地下城游戏(DP)

    文章目录 1. 题目 2. 解题 1. 题目 一些坏人抓住了公主(P)并将她关在了地下城的右下角. 地下城是由 M x N 个房间组成的二维网格. 我们英勇的骑士(K)最初被安置在左上角的房间里, 他 ...

  5. 【Java】LeetCode 174. 地下城游戏 —— 困难

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

  6. [C++] LeetCode 174. 地下城游戏

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

  7. 每日题解:LeetCode 174. 地下城游戏

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

  8. [leetcode]174. 地下城游戏

    写了半天从[0][0]开始的,代码有90多行,就过了一个样例..看了题解,原来只能倒着来..额额 1.题解里写得最简洁的: https://leetcode-cn.com/problems/dunge ...

  9. LeetCode 174. 地下城游戏

    题目链接: 力扣https://leetcode-cn.com/problems/dungeon-game/ [分析]一看向下和向右走,第一反应肯定是dp了.但是如果从左上角开始dp的话,加血会影响我 ...

最新文章

  1. 快大三了,该确定专业方向了
  2. linux fedora安装simplescreenrecorder
  3. 如何利用.NET Core搭建跨平台的控制台应用程序
  4. 程序员面试金典 - 面试题 04.01. 节点间通路(图的遍历)
  5. 【学习笔记】第三章——内存 II(分页存储、快表与局部性原理、两级页表)
  6. 拒绝yyds洗脑,我是Pro!
  7. python作业案例_作业解析-python bayesian案例
  8. IAM页,IAM链表,分配单元
  9. html 点击选择变色,JS实现菜单点击后变色
  10. 树莓派3vnc分辨率设置
  11. 使用工具(Database Configuration Assistant)创建Oracle数据库
  12. 3796.凑平方-AcWing题库
  13. matlab 直流-直流变换器毕业论文,基于MATLAB直流-直流变换器的研究毕业论文.docx-资源下载在线文库www.lddoc.cn...
  14. python泊松分布_Python数据可视化:泊松分布详解
  15. 全网M1、MAC傻瓜式免费安装xmind
  16. 好省app靠谱吗到底怎么回事,好省平台是骗局吗
  17. 血污夜之仪式秘密巫师实验室收集策略
  18. 【JavaSE】入门概述(1~41)
  19. rxtx java 错误
  20. pandas 选择满足特定条件的行

热门文章

  1. iwebshop分销商城系统具体有哪些优势?
  2. android模拟器检测方案优化,逍遥模拟器优化方案 - 新手引导 - 逍遥安卓论坛 - Powered by Discuz!...
  3. springboot整合mybatis之Invalid bound statement解决
  4. css3 搜索栏 圆角,CSS3 圆角
  5. 世界上这五类人永远不可能成为编程界牛人
  6. reviewer中文_中文审稿意见怎么写
  7. 0.96OLED图标取模,包括信号图标,蓝牙图标,闹钟,电池
  8. m1芯片的mac怎样安装PS2021 m1芯片的mac安装Photoshop21适配版解决方案 2021最新方法
  9. WPS---EXCEL(十一)---将插入数据转化成柱状图
  10. 笔记13:Python 和 Elasticsearch 构建简易搜索