Leetcode--174. 地下城游戏
初始化dp表格并处理右下角的房间。 从右下角开始逆向填充dp表格,计算每个房间的最低初始健康点数。 返回dp[0][0]即为所需的最低初始健康点数。
发布日期:2021-04-30 21:02:02
浏览次数:109
分类:精选文章
本文共 1575 字,大约阅读时间需要 5 分钟。
骑士必须从左上角移动到右下角的公主所在房间,每次只能向右或向下移动。网格中的房间可能会影响骑士的健康点数:加血房间会增加,扣血房间会扣减。初始健康点数必须足够高,以确保骑士能够成功拯救公主。
为了计算最低初始健康点数,我们可以使用动态规划。设dp[i][j]表示到达房间(i, j)所需的最低初始健康点数。动态规划的递推公式为:
dp[i][j] = max(1, min(dp[i+1][j], dp[i][j+1]) - dungeon[i][j])
处理边界条件时,如果公主所在的房间值为负数,则将其调整为至少1,以确保骑士能够到达。
从右下角开始逆向计算,填充dp表格,最后返回dp[0][0]即为所需的最低初始健康点数。
完整代码如下:
public class Solution174 { public static int calculateMinimumHP(int[][] dungeon) { int m = dungeon.length; int n = dungeon[0].length; int[][] dp = new int[m][n]; int i, j; // 处理公主所在的房间 if (dungeon[m - 1][n - 1] < 0) { dp[m - 1][n - 1] = 1 + Math.abs(dungeon[m - 1][n - 1]); } else { dp[m - 1][n - 1] = 1; } // 从右下角开始向上和向左填充dp表 for (i = m - 1; i >= 0; i--) { for (j = n - 1; j >= 0; j--) { if (i == m - 1 && j != n - 1) { dp[i][j] = Math.max(1, dp[i][j + 1] - dungeon[i][j]); } else if (j == n - 1 && i != m - 1) { dp[i][j] = Math.max(1, dp[i + 1][j] - dungeon[i][j]); } else if (i != m - 1 && j != n - 1) { dp[i][j] = Math.max(1, Math.min(dp[i + 1][j], dp[i][j + 1]) - dungeon[i][j]); } } } return dp[0][0]; } public static void main(String[] args) { int[][] nums = { { -2, -3, 3 }, { -5, -10, 1 }, { 10, 30, -5 } }; System.out.println(calculateMinimumHP(nums)); }} 代码解释:
通过这种方法,可以高效地计算出骑士拯救公主所需的最低初始健康点数。
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2026年06月17日 05时08分00秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PID控制器数字化
2023-03-02
Qwen-VL项目使用指南
2023-03-02
PIESDKDoNet二次开发配置注意事项
2023-03-02
PIGS POJ 1149 网络流
2023-03-02
PIL Image对图像进行点乘,加上常数(等像素操作)
2023-03-02
PIL Image转Pytorch Tensor
2023-03-02
PIL&QOOT;IOERROR:带有大图像的图像文件被截断(&Q)
2023-03-02
PIL.Image、cv2的img、bytes相互转换
2023-03-02
PIL.Image进行图像融合显示(Image.blend)
2023-03-02
pilicat-dfs 霹雳猫-分布式文件系统
2023-03-02
Pillow lacks the JPEG 2000 plugin
2023-03-02
SpringBoot之ElasticsearchRestTemplate常用示例
2023-03-02
ping 全网段CMD命令
2023-03-02
ping 命令的七种用法,看完瞬间成大神
2023-03-02
Pinia入门(快速上手)
2023-03-02
Pinia:$patch的使用场景
2023-03-02
Pinia:$subscribe()的使用场景
2023-03-02
Pinpoint对Kubernetes关键业务模块进行全链路监控
2023-03-02
Pinterest 大规模缓存集群的架构剖析
2023-03-02