博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态规划LeetCode174地下城游戏
阅读量:4873 次
发布时间:2019-06-11

本文共 1523 字,大约阅读时间需要 5 分钟。

题目描述:

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

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

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

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

 

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

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

-2 (K) -3 3

-5 -10 1
10 30 -5 (P)
 

说明:

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

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

 

思路:

动态规划题目要是想明白了其实很简单,但是如果想不明白就会很困难(好吧,所有的题目都是这样......)。

不多解释,直接上代码,有疑问的地方评论区见哦!!

这道题LeetCode上标注“Hard”,但是如果想清楚了其实不难,我就是一把过,呵呵!!

1 class Solution { 2     public int calculateMinimumHP(int[][] dungeon) { 3         if (dungeon.length==0||dungeon[0].length==0) { 4             return 0; 5         } 6         int row=dungeon.length; 7         int col=dungeon[0].length; 8         int[][] dp=new int[row][col]; 9         dp[row-1][col-1]=Math.max(1,1-dungeon[row-1][col-1]);10         for (int i=row-2; i>=0; i--) {11             dp[i][col-1]=Math.max(dp[i+1][col-1]-dungeon[i][col-1],1);12         }13         for (int i=col-2; i>=0; i--) {14             dp[row-1][i]=Math.max(dp[row-1][i+1]-dungeon[row-1][i],1);15         }16         for (int i=row-2; i>=0; i--) {17             for (int j=col-2; j>=0; j--) {18                 dp[i][j]=Math.max(Math.min(dp[i][j+1],dp[i+1][j])-dungeon[i][j],1);19             }20         }21         return dp[0][0];22     }23 }

欢迎评论,共同进步!!

转载于:https://www.cnblogs.com/hengzhezou/p/11045996.html

你可能感兴趣的文章
Python之路,Day12 - 那就做个堡垒机吧
查看>>
linux之shell之if、while、for语句介绍
查看>>
Mysql phpStudy升级Mysql版本,流产了怎么办?
查看>>
SQLServer之数据库行锁
查看>>
OFDM仿真
查看>>
代理模式
查看>>
AC日记——背包问题 V2 51nod 1086
查看>>
CSS关键字
查看>>
UIAlertView
查看>>
ES6快速入门(三)类与模块
查看>>
赛博web
查看>>
Java动手动脑第四讲课堂作业
查看>>
PowerDesigner 数据建模技术视频教程
查看>>
Webpack 开发服务器代理设置解决跨域问题
查看>>
Solr 15 - Solr添加和更新索引的过程 (文档的路由细节)
查看>>
DOS命令
查看>>
Oracle merge基本使用
查看>>
03-树1 树的同构
查看>>
第九周周记
查看>>
AdvStringGrid入门使用
查看>>