文章目录

  • 1. 题目
  • 2. 解题

1. 题目

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

骑士的初始健康点数为一个正整数。
如果他的健康点数在某一时刻降至 0 或以下,他会立即死亡。

有些房间由坏人守卫,因此骑士在进入这些房间时会失去健康点数(若房间里的值为负整数,则表示骑士将损失健康点数);
其他房间要么是空的(房间里的值为 0),要么包含增加骑士健康点数的魔法球(若房间里的值为正整数,则表示骑士将增加健康点数)。

为了尽快到达公主,骑士决定每次只向右或向下移动一步。

编写一个函数来计算确保骑士能够拯救到公主所需的最低初始健康点数

例如,考虑到如下布局的地下城,如果骑士遵循最佳路径
右 -> 右 -> 下 -> 下,则骑士的初始健康点数至少为 7。-2 (K) -3    3
-5     -10    1
10      30   -5 (P)
说明:
骑士的健康点数没有上限。任何房间都可能对骑士的健康点数造成威胁,
也可能增加骑士的健康点数,
包括骑士进入的左上角房间以及公主被监禁的右下角房间。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/dungeon-game
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 参考官方的解题
  • 正向不好计算最低的初始生命值,反向考虑
  • dp[i][j]表示走到 坐标处的所需的最低生命值
class Solution {public:int calculateMinimumHP(vector<vector<int>>& grid) {int m = grid.size(), n = grid[0].size(), i, j, minlife;vector<vector<int>> dp(m+1,vector<int>(n+1, INT_MAX));dp[m][n-1] = dp[m-1][n] = 1;//处理边界更方便for(i = m-1; i >= 0; --i){for(j = n-1; j >= 0; --j){minlife = min(dp[i+1][j], dp[i][j+1]);//使用较小的dp[i][j] = max(minlife-grid[i][j], 1);//在 i,j,处你的生命值至少需要为1}}return dp[0][0];}
};


12 ms 8.9 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 174. 地下城游戏(DP)相关推荐

  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. [力扣题解] 174. 地下城游戏 DP

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

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

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

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

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

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

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

  8. leetcode 174:地下城游戏

    [分析]这道题一看就是动态规划,最开始从左上角往右下走,每次判断右侧和下侧哪个数大就走哪个方向,但是这样想的话就会有一个问题,就是我们需要判断每次到达一个房间后,我们的血量不能是负数.而问题的关键是骑 ...

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

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

最新文章

  1. 使用sourceInsight 提高代码编写效率
  2. react单选框获取值
  3. unity game和scene效果不一样_都说水泥漆和乳胶漆只是叫法不一样,对房子装修效果一样,事实呢...
  4. java spring 登录验证_详解使用Spring3 实现用户登录以及权限认证
  5. 我已经写了48年代码了,我感觉我还能写下去
  6. 云原生 | .NET 5 with Dapr 初体验
  7. python turtle画房子详细解释_[宜配屋]听图阁
  8. appenders_Log4j Appenders教程
  9. docker中使用idea部署运行项目(项目以镜像方式运行)
  10. Xcode常用的快捷键有哪些?
  11. 微信小程序轮播图,图片自适应,图片循环播放,图片之间有空白空间
  12. zookeeper源码分析一:源码环境搭建
  13. 2023年最新谷歌Google帐号Gmail邮箱账号怎么注册成功的方法与教程?
  14. 7-9 部落 (25分)
  15. Pattern Recognition期刊投稿经验
  16. [翼灵物联网工作室例会分享]
  17. 安全多方计算之六:秘密共享
  18. 网络安全知识体系1—网安小白第二篇
  19. PHP ACCESS-CONTROL-ALLOW-ORIGIN ,设置跨域头
  20. Qt写的流量监控 and 网络延迟 and 自动隐藏

热门文章

  1. python会不会出4_无极4网人生苦短,Python会不会被取代?国外网友
  2. JPG PNG GIF BMP图片格式的区别
  3. C++ virtual 析构函数
  4. linux grep 匹配空格_17 个案例,5 分钟简单搞定 Linux 正则表达式!
  5. 第一季4:Hi3518E_SDK_Vx.x.x.x的SDK目录结构
  6. LeetCode283——Move Zeroes(将0移动到数组最后面)
  7. 从0-1背包问题学习回溯法、分支界限法、动态规划
  8. 《团队名称》第八次团队作业:Alpha冲刺day5
  9. linux操作指令及根目录介绍
  10. hihoCoder #1143 : 骨牌覆盖问题·一