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

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

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

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

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

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

-2 -3 3
-5 -10 1
10 30 -5

说明:

骑士的健康点数没有上限。

任何房间都可能对骑士的健康点数造成威胁,也可能增加骑士的健康点数,包括骑士进入的左上角房间以及公主被监禁的右下角房间。

class Solution {public int calculateMinimumHP(int[][] dungeon) {int n=dungeon.length,m=dungeon[0].length;int[][] dp=new int[n+1][m+1];//数组含义是(i,j)到终点需要的点数for (int i=0;i<=n;i++)//初始化Arrays.fill(dp[i],Integer.MAX_VALUE);dp[n][m-1]=dp[n-1][m]=1;for(int i=n-1;i>=0;i--)//从右下到左上-就是倒着走,还原骑士的路线for(int j=m-1;j>=0;j--)dp[i][j]=Math.max(Math.min(dp[i+1][j],dp[i][j+1])-dungeon[i][j],1);//下一步的两种走法中所需点数少的那个-当前位置需要改变的点数,如果当前位置加的点数太大,则初始点数只要为1就满足了return dp[0][0];}
}

leetcode174. 地下城游戏(动态规划)相关推荐

  1. leetcode174. 地下城游戏(java)

    地下城游戏 leetcode174. 地下城游戏 题目描述 动态规划 解题思路 代码 动态规划专题 leetcode174. 地下城游戏 来源:力扣(LeetCode) 链接:https://leet ...

  2. LeetCode--174.地下城游戏(动态规划)

    地下城游戏(动态规划) 1. 题目描述 2. 题目分析 3. C语言实现 1. 题目描述 难度:困难 2. 题目分析 这道题是64.最小路径和的进阶版.但是这一题我们不能从左上向右下的顺序,而是**要 ...

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

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

  4. LeetCode174——地下城游戏

    我的LeetCode代码仓:https://github.com/617076674/LeetCode 原题链接:https://leetcode-cn.com/problems/dungeon-ga ...

  5. Leetcode--174. 地下城游戏

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

  6. 【普通人题解】LeetCode174. 地下城游戏

    建议先看这个题 这个题 这个题,再看这个题. dfs 显然可以dfs,但是我们就不看了,因为大概率会超时. 动态规划 由于问题问初始的血量最低是多少,dp问题一般是最后一个状态作为输出值,所以对应的, ...

  7. LeetCode174. 地下城游戏

    动态规划,用dp[i][j]表示第i行第j列的格子到终点所需的最小初始值,这题如果从左上往右下递推,就需要同时记录从起点到当前位置的路径和以及从起点到当前位置所需要的最小初始值,比较麻烦. 因此我们可 ...

  8. 动态规划C++实现--龙与地下城游戏

    题目:龙与地下城游戏 给定一个二维数组map,含义是一张地图,例如,如下矩阵: -2   -3    1 -5  -10   1 0    30  -5 游戏的规则如下: 骑士从左上角出发,每次只能向 ...

  9. 【中等】龙与地下城游戏问题-Java:经典动态规划解法

    分享一个大牛的人工智能教程.零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程 package live.every.day.ProgrammingDesign.Codi ...

最新文章

  1. PHP-代码审计-XSS
  2. c++11 yield函数的使用
  3. 最小总代价(洛谷-U17433)
  4. Codeforces Round #523 (Div. 2)
  5. HTTP/1.1与HTTP/1.0的区别
  6. visual studio 2017 连接 SQL Server
  7. 【新功能发布】事件监控升级-支持自动化处理云产品异常
  8. 洛谷P4135 作诗 --分块基础
  9. iOS网络协议_HTTP/TCP/IP浅析
  10. 智能视频抠图_抠图扣视频,AI人工智能还能这样玩!
  11. ubuntu安装以太方mist
  12. 【此间乐,不思蜀】 大一不想咸鱼的暑假7.17
  13. xbox无线适配器驱动_雷蛇推出两款适用于新 Xbox 的游戏耳机:Kaira、Kaira Pro
  14. JAVA图形小动画之简单行星运动
  15. 手动配置协议和服务器POP,企业邮箱如何设置POP/SMTP等服务-上海腾曦网络[foxmail]...
  16. 简单计算 ( 山东科技大学第二届ACM校赛)
  17. 计算机显示器模糊,电脑显示器模糊是什么原因
  18. Centos 学习笔记
  19. 内网渗透 | FRP代理工具详解
  20. FPGA入门(1):软件安装

热门文章

  1. 【信号】函数kill、raise、abort、alarm
  2. Java面试题:kafka幂等性+事务
  3. 我在华为做Android外包的真实经历!吊打面试官系列!
  4. 套接字设置为(非)阻塞模式
  5. 关于web前端的学习路线
  6. 【懒癌发作】收集各种懒癌发作时用程序写作业的程序
  7. 恐怖之城(深圳)系列1---K113大巴洗劫一空
  8. 封装绑定以BaseDataList , ListControl 为基类的函数库
  9. 逻辑回归的通俗解释 逻辑回归的定位
  10. WordPress Option API(数据库储存 API)