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

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

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

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

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

例如,考虑到如下布局的地下城,如果骑士遵循最佳路径 右 -> 右 -> 下 -> 下,则骑士的初始健康点数至少为 7。

class Solution {
public:int calculateMinimumHP(vector<vector<int>>& dungeon) {if(dungeon.size() == 0 || dungeon[0].size() == 0) return 0;int row = dungeon.size();int col = dungeon[0].size();vector<vector<int>> dp(row, vector<int>(col , 0));dp[row-1][col-1] = (dungeon[row-1][col-1] > 0 ? 1 : 1-dungeon[row-1][col-1]);        //设定初值for(int i = row-2; i >= 0; i--){dp[i][col-1] = max(1, dp[i+1][col-1] - dungeon[i][col-1]);}for(int i = col-2; i >= 0; i--){dp[row-1][i] = max(1, dp[row-1][i+1] - dungeon[row-1][i]); }for(int i = row-2; i >= 0; i--){for(int j = col-2; j >= 0; j--){dp[i][j] = max(1, min(dp[i+1][j], dp[i][j+1])-dungeon[i][j]);}}return dp[0][0];}
};

采用动态规划的思想,从下往上遍历

LeetCode第174题--地下城游戏相关推荐

  1. ​LeetCode刷题实战174:地下城游戏

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  2. [Leetcode][第174题][JAVA][地下城游戏][DFS][动态规划]

    [问题描述][中等] [解答思路] 1. 回溯(暴力)& 优化 超时,需要优化 public int calculateMinimumHP(int[][] dungeon) {if (dung ...

  3. 跳格子问题(LeetCode第55题 跳跃游戏)平民解

    目录 三种思路 1.动态规划(结果超时) 2.贪心法 3.换一种思路 三种思路 1.动态规划(结果超时) 时间复杂度为o(n^2) def canJump(self, nums):"&quo ...

  4. 动态规划类题目-Leetcode174题-地下城游戏

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

  5. [Leetcode] 第289题 生命游戏

    一.题目描述 根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机. 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞.每个细胞具有一个初 ...

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

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

  7. 动态规划——地下城游戏

    题目链接 leetcode在线oj题--地下城游戏 题目描述 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 .地下城是由 m x n 个房间组成的二维网格.我们英勇的骑士最初被安置在 ...

  8. [算法]LeetCode每日一题--174. 地下城游戏(Java)

    DailyChallenge 174. 地下城游戏 Hard20200712 Description 一些恶魔抓住了公主(P)并将她关在了地下城的右下角.地下城是由 M x N 个房间组成的二维网格. ...

  9. leetcode题库174 地下城游戏

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

最新文章

  1. Hinton的胶囊网络不太行?CVPR Oral论文:不比卷积网络更「强」
  2. javascript代码块概念及预编译机制
  3. 《系统集成项目管理工程师》必背100个知识点-08项目可行性研究内容
  4. android ontoch事件无反应_一切从android的handler说起(三)
  5. [转帖]Ubuntu 对应内核版本
  6. python unpack infinity_fit_转换出错:输入包含NaN、infinity或对dtype(“float64”)太大的值...
  7. Apache Ivy
  8. java 合成mp3_java如何把文本合成音频格式(MP3)
  9. mysql+keepalived实现双主自由切换
  10. 西门子step7安装注册表删除_西门子STEP7程序安装与卸载教程
  11. ROS学习—【在solidworks环境中将六自由度机械臂转换为URDF模型】
  12. mtk2503 新增物联网卡apn
  13. 图书馆图书管理系统python_使用python的简易图书馆管理系统
  14. 北外和北邮计算机,北京邮电大学和北京外国语大学哪所大学比较好?大学对比介绍...
  15. RISC-V 开源模拟器环境构建
  16. 期货如何展期(期货合约展期)
  17. Windows 无法删除文件夹 —— 访问被拒绝 / 因为目录不是空的
  18. cookie session的设置
  19. 2019春招面经总结
  20. NAS入门之——Mac系统下添加My Cloud EX2 Ultra访问

热门文章

  1. linux系统下 桌面被放大如何还原,电脑屏幕变大了怎么还原?电脑屏幕变大的还原方法...
  2. 软件项目经理新手上路6 - 不要进行小改进
  3. 一些非Windows系的语言,工具介绍
  4. 深入理解javascript原型和原型链
  5. Win10 10586 更新
  6. Unity ShaderGraph全息影像条纹效果案例
  7. Python自动化办公(一)
  8. matlab 生日问题模拟,约会问题模拟,中心极限定理仿真
  9. iTOP-RK3568开发板Android11系统开发笔记使用ADB工具允许usb调试
  10. excel复制数字乱码_仅在Excel中复制数字