写了半天从[0][0]开始的,代码有90多行,就过了一个样例。。看了题解,原来只能倒着来。。额额

1、题解里写得最简洁的:

https://leetcode-cn.com/problems/dungeon-game/solution/c-dp-10xing-by-pjpj/

dp[i][j]表示从[i][j]位置到[m-1][n-1]需要的最小血量,即到[i,j]时勇士的血量最少得这么多

dp[i][j] = max(1, (min(dp[i+1][j], dp[i][j+1]) - dungeon[i][j]));

class Solution {public:int calculateMinimumHP(vector<vector<int>>& dungeon) {int m = dungeon.size(), n = dungeon[0].size();vector<vector<int>>dp(m + 1, vector<int>(n + 1, INT_MAX/10)); //初始化为无穷大dp[m][n-1] = 1;for(int i = m - 1; i >= 0; i--){for(int j = n - 1; j >= 0; j--){dp[i][j] = max(1, (min(dp[i+1][j], dp[i][j+1]) - dungeon[i][j]));}}return dp[0][0];}
};

2、这个可能好理解点

class Solution {public:int calculateMinimumHP(vector<vector<int>>& dungeon) {int m = dungeon.size(), n = dungeon[0].size();vector<vector<int>>dp(m, vector<int>(n, 0));//当dungeon[m-1][n-1] >= 0,这 1 - dugeon[m-1][n-1] <= 1//反之,1 - dugeon[m-1][n-1] > 1dp[m-1][n-1] = max(1, 1 - dungeon[m-1][n-1]);for(int i = n-2; i >= 0; i--){dp[m-1][i] = max(1, (dp[m-1][i+1] - dungeon[m-1][i]));}for(int i = m-2; i >= 0; i--){dp[i][n-1] = max(1, (dp[i+1][n-1] - dungeon[i][n-1]));}for(int i = m - 2; i >= 0; i--){for(int j = n - 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];}
};

3、空间优化:

class Solution {public:int calculateMinimumHP(vector<vector<int>>& dungeon) {int m = dungeon.size(), n = dungeon[0].size();vector<int>dp(n + 1, INT_MAX/10);dp[n-1] = 1;for(int i = m - 1; i >= 0; i--){dp[n-1] = max(1, dp[n-1] - dungeon[i][n-1]);for(int j = n - 2; j >= 0; j--){dp[j] = max(1, (min(dp[j], dp[j+1]) - dungeon[i][j]));}}return dp[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:地下城游戏

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

  9. LeetCode 174. 地下城游戏

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

最新文章

  1. VMware 接入 Openstack — 使用 Openstack 创建 vCenter 虚拟机
  2. 【Python基础】安利3个Python数据分析EDA神器!
  3. python float字节数_float型的数在内存中的表示 附:python3解析函数 | 学步园
  4. R运行大数据的过程中遇到的问题:不能有负长度矢量
  5. 某大厂外包员工在工作群抢新年红包,却被要求退回...
  6. python读取txt文件存储数组_python : 将txt文件中的数据读为numpy数组或列表
  7. eclipse启动mysql报错_Eclipse+mysql+java Eclipse中运行没有问题,但打包后运行不了,也不报错,求高手指点...
  8. python网络爬虫学习笔记(三):urllib库的使用
  9. C++内置数组和array的比较
  10. Java设计模式——建造者模式
  11. 实现数据库连接池druid的工具类
  12. Linux ERROR: configuration failed for package ‘rgeos’
  13. 如何点亮QQ邮箱图标 - 龙 炫家族特权
  14. 论文|少样本学习综述
  15. mysql 手工配置_小姜学网络(MySQL数据库的手工安装与配置)附代码
  16. 常用期刊、会议的简称缩写(深度学习图像处理领域)
  17. csgo跑图文件_一键跑图!极为方便的CSGO跑图工具(附2020年5月28日更新)
  18. 单元节点和积分点有什么区别
  19. 读懂 SSD – 什么是顺序读写、随机读写、4K读写、IOPS值?
  20. 【更新】【封装必备】封装辅助 - 清理优化工具 For Win7(IT天空会员专版)

热门文章

  1. python课程开课吧怎么样-律所:我们更想招这样的人……
  2. python入门经典代码-python经典入门学习锦集就这篇够了,强烈建议收藏!
  3. python日常能做什么-Python除了做AI、还能干啥?
  4. python读音有道-python爬虫之有道在线翻译
  5. 学python能做什么类型的工作-Python支持哪些数据类型
  6. 学python用什么软件-零基础初学python需要安装哪些软件?希望对你们有帮助
  7. css 文字超出隐藏显示省略号
  8. win10一直正在检查更新_win10一直存在的烦人问题,终于被彻底解决!你会选择更新么?...
  9. java 可变 不可变_java中的不可变类型的探究
  10. JavaScript面向对象之Object类型