[leetcode]174. 地下城游戏
写了半天从[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. 地下城游戏相关推荐
- LeetCode 174.地下城游戏
LeetCode 174.地下城游戏 一些恶魔抓住了公主(P)并将她关在了地下城的右下角.地下城是由 M x N 个房间组成的二维网格.我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城 ...
- LeetCode 174. 地下城游戏 | Python
文章目录 174. 地下城游戏 题目 解题思路 代码实现 实现结果 欢迎关注 174. 地下城游戏 题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/ ...
- Java实现 LeetCode 174 地下城游戏
174. 地下城游戏 一些恶魔抓住了公主(P)并将她关在了地下城的右下角.地下城是由 M x N 个房间组成的二维网格.我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来 ...
- LeetCode 174. 地下城游戏(DP)
文章目录 1. 题目 2. 解题 1. 题目 一些坏人抓住了公主(P)并将她关在了地下城的右下角. 地下城是由 M x N 个房间组成的二维网格. 我们英勇的骑士(K)最初被安置在左上角的房间里, 他 ...
- 【Java】LeetCode 174. 地下城游戏 —— 困难
一些恶魔抓住了公主(P)并将她关在了地下城的右下角.地下城是由 M x N 个房间组成的二维网格.我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主. 骑士的初始 ...
- [C++] LeetCode 174. 地下城游戏
题目 一些恶魔抓住了公主(P)并将她关在了地下城的右下角.地下城是由 M x N 个房间组成的二维网格.我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主. 骑士 ...
- 每日题解:LeetCode 174. 地下城游戏
题目地址 个人博客地址 题目描述 一些恶魔抓住了公主(P)并将她关在了地下城的右下角.地下城是由 M x N 个房间组成的二维网格.我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通 ...
- leetcode 174:地下城游戏
[分析]这道题一看就是动态规划,最开始从左上角往右下走,每次判断右侧和下侧哪个数大就走哪个方向,但是这样想的话就会有一个问题,就是我们需要判断每次到达一个房间后,我们的血量不能是负数.而问题的关键是骑 ...
- LeetCode 174. 地下城游戏
题目链接: 力扣https://leetcode-cn.com/problems/dungeon-game/ [分析]一看向下和向右走,第一反应肯定是dp了.但是如果从左上角开始dp的话,加血会影响我 ...
最新文章
- VMware 接入 Openstack — 使用 Openstack 创建 vCenter 虚拟机
- 【Python基础】安利3个Python数据分析EDA神器!
- python float字节数_float型的数在内存中的表示 附:python3解析函数 | 学步园
- R运行大数据的过程中遇到的问题:不能有负长度矢量
- 某大厂外包员工在工作群抢新年红包,却被要求退回...
- python读取txt文件存储数组_python : 将txt文件中的数据读为numpy数组或列表
- eclipse启动mysql报错_Eclipse+mysql+java Eclipse中运行没有问题,但打包后运行不了,也不报错,求高手指点...
- python网络爬虫学习笔记(三):urllib库的使用
- C++内置数组和array的比较
- Java设计模式——建造者模式
- 实现数据库连接池druid的工具类
- Linux ERROR: configuration failed for package ‘rgeos’
- 如何点亮QQ邮箱图标 - 龙 炫家族特权
- 论文|少样本学习综述
- mysql 手工配置_小姜学网络(MySQL数据库的手工安装与配置)附代码
- 常用期刊、会议的简称缩写(深度学习图像处理领域)
- csgo跑图文件_一键跑图!极为方便的CSGO跑图工具(附2020年5月28日更新)
- 单元节点和积分点有什么区别
- 读懂 SSD – 什么是顺序读写、随机读写、4K读写、IOPS值?
- 【更新】【封装必备】封装辅助 - 清理优化工具 For Win7(IT天空会员专版)
热门文章
- python课程开课吧怎么样-律所:我们更想招这样的人……
- python入门经典代码-python经典入门学习锦集就这篇够了,强烈建议收藏!
- python日常能做什么-Python除了做AI、还能干啥?
- python读音有道-python爬虫之有道在线翻译
- 学python能做什么类型的工作-Python支持哪些数据类型
- 学python用什么软件-零基础初学python需要安装哪些软件?希望对你们有帮助
- css 文字超出隐藏显示省略号
- win10一直正在检查更新_win10一直存在的烦人问题,终于被彻底解决!你会选择更新么?...
- java 可变 不可变_java中的不可变类型的探究
- JavaScript面向对象之Object类型