动态规划——地下城游戏

news2025/1/11 13:01:31

题目链接

leetcode在线oj题——地下城游戏

题目描述

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

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

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

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

返回确保骑士能够拯救到公主所需的最低初始健康点数。

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

题目示例

示例1

在这里插入图片描述
输入:dungeon = [[-2,-3,3],[-5,-10,1],[10,30,-5]]
输出:7
解释:如果骑士遵循最佳路径:右 -> 右 -> 下 -> 下 ,则骑士的初始健康点数至少为 7 。

示例2

输入:dungeon = [[0]]
输出:1

题目提示

  • m == dungeon.length
  • n == dungeon[i].length
  • 1 <= m, n <= 200
  • -1000 <= dungeon[i][j] <= 1000

解题思路

之前介绍的动态规划题目都是从左上角开始,迭代动态规划方程,一直走到右下角,得到最终的结果,但是这道题是需要我们给出初始的血量,因此需要从右下角开始,向左上角迭代

当进入到负数的房间时,骑士会扣血,但是我们是从最后一个房间推导前面的房间,因此往前走遇到负数需要加血,遇到正数可以减血

而当前状态最小血量应该是走下面和走右面都可以支撑,因此是求下面和右面状态的较小者 - 当前房间的buff

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

如果得到的数字是负数,说明到这个位置骑士已经死了,这是不应该的,骑士最小也要有一点血,因此将其重新变为1点血

dp[i][j] = Math.max(1, dp[i][j]);

从右下角开始迭代需要考虑越界问题,最下面一行和最右面一列会出现越界,为了简化代码,可以将dp数组多添加一行一列,而为了不改变动态方程的有效性,最下面一行和最右面一列需要填入不影响其他位置的值——正无穷大

而为了使得最后一个房间的buff减益后还能剩一点血量,dp[m - 1][n] = dp[m][n - 1] = 1;

完整代码

class Solution {
    public int calculateMinimumHP(int[][] dungeon) {
        int m = dungeon.length;;
        int n = dungeon[0].length;
        int[][] dp = new int[m + 1][n + 1];

        for(int i = 0; i <= n; i++){
            dp[m][i] = Integer.MAX_VALUE;
        }
        for (int i = 0; i <= m; i++) {
            dp[i][n] = Integer.MAX_VALUE;
        }
        dp[m - 1][n] = 1;
        dp[m][n - 1] = 1;

        for (int i = m - 1; i >= 0; i--) {
            for (int j = n - 1; j >= 0; j--) {
                dp[i][j] = Math.min(dp[i + 1][j], dp[i][j + 1]) - dungeon[i][j];
                dp[i][j] = Math.max(1, dp[i][j]);
            }
        }
        return dp[0][0];
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/707037.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:线上免费Python教程推荐

线上免费Python教程推荐 Python作为一门简单易学的编程语言&#xff0c;在各个行业和领域都越来越受欢迎。很多人想学Python&#xff0c;但是可能因为费用等问题而卡住了。今天&#xff0c;我们来介绍一些免费的Python教程&#xff0c;帮助那些想要学习Python但没有预算的人。…

上手vue2的学习笔记2之安装vue的踩坑经历

上一篇笔记 上手vue2的学习笔记1之了解前端三剑客&#xff0c;简单介绍了学习vue框架之前应该具备的基础知识和四个我认为非常有用的学习链接&#xff0c;建议大家动手实践一下&#xff0c;更多深刻的理解前端三剑客之间的关系。 这一篇笔记主要介绍我在安装vue过程中遇到的坑…

华为FIT痩AP旁挂式隧道组网实验(一)

拓扑图 实验设备型号ACAC6005S1S5700S2S3700APAP2050DNAP4AP2050DNAR1AR200 没有配置好之前,是没有这个AP范围圈的 配置流程 接入交换机创建VLAN,配置对应端口的链路类型,放行vlan,开启端口隔离 # 与AP连接的接口(0/0/2) [S2]vlan batch 100 101 [S2]int e0/0/2 [S2-Ethern…

Android中关于SharedPreference参数的问题

文章目录 一、前言二、问题背景三、问题定位四、问题解决 一、前言 在上周开发时遇到一个问题&#xff0c;记录一下&#xff1a; 首先描述一下应用场景&#xff1a; 使用sharedPreference进行存储&#xff0c;命名为a.xml&#xff0c;这里简称为a文件有两个服务&#xff0c;一…

海思nnie 部署环境 搭建流程

文章目录 在windows上安装 Ruyi studio 软件MinG-64 安装运行软件在windows上安装 Ruyi studio 软件 Hi3559A的资料包 链接:https://pan.baidu.com/s/1rQcXvLW6ruSxIs4C9cMSCg 提取码:zsq5 从百度网盘下载软件 有很多个版本, 这里我选择的是SVP_PC.part2的版本 解压后得到:…

[爬虫]解决机票网站文本混淆问题-实战讲解

前言 最近有遇到很多小伙伴私信向我求助&#xff0c;遇到的问题基本上都是关于文本混淆或者是字体反爬的问题。今天给大家带来其中一个小伙伴的实际案例给大家讲讲解决方法 &#x1f4dd;个人主页→数据挖掘博主ZTLJQ的主页 ​​ 个人推荐python学习系列&#xff1a; ☄️爬虫J…

YOLOv8训练和预测

目录 1.源码下载 2.环境配置 3. 数据集准备 4.训练配置 5.训练时遇到的错误 1.源码下载 GitHub - ultralytics/ultralytics: NEW - YOLOv8 &#x1f680; in PyTorch > ONNX > CoreML > TFLite 2.环境配置 运行环境需要的包和YOLOv5/v7一样&#xff0c;这里不…

C语言:移位操作注意事项

移位操作&#xff1a;因为操作符的原因&#xff0c;注意加括号。还有没必要在移位的时候进行&#xff08;uint32_t&#xff09;转换。 测试程序如下&#xff1a; #include <string.h> #include <stdlib.h> #include <stdio.h> #include <stdint.h>i…

javaweb学习3

javascript入门 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script type"text/javascript"> // <!-- 可以在head和body嵌入script执行顺序从上而…

KEIL5-MDK配色方案

改字体 复制如下代码&#xff0c;替换原有文件内容 global.prop文件&#xff1a;D:Keil_v5\UV4\global.prop # properties for all file types indent.automatic1 virtual.space0 view.whitespace0 view.endofline0 code.page0 caretline.visible0 highlight.matchingbraces1 …

【深度学习】日常笔记8

过拟合是指模型在训练集上表现良好&#xff0c;但在验证集和测试集上表现不佳的现象。这是因为模型在训练过程中过度学习了训练数据中的噪声和细节&#xff0c;而忽略了更一般的特征和规律&#xff0c;导致模型泛化能力不足。 具体来说&#xff0c;当模型在训练集上进行训练时&…

some files could not be transferre Xcode14.3打包问题

方法1: Command空格 搜索 该项目的 source“ ( r e a d l i n k " (readlink " (readlink"{source}”)" 替换为source“ ( r e a d l i n k − f " (readlink -f " (readlink−f"{source}”)" 即可。 方法2:切换Xcode 版本&#xff0…

C++面向对象丨4. 文件操作

操作系统&#xff1a;Windows IDE&#xff1a;Visual Studio 2019 文章目录 1 文本文件1.1 写文件1.2 写文件实例1.3 读文件1.4 读文件实例 2 二进制文件2.1 写文件2.2 写文件实例2.2 读文件2.4 读文件实例 程序运行时产生的数据都属于临时数据&#xff0c;程序一旦运行结束都会…

计算机图形硬件(二) 5 - 1 视频显示设备

现在&#xff0c;计算机图形学的功能与应用已经得到了广泛承认&#xff0c;大量的图形硬件和软件系统已经应用到了几乎所有的领域。通用计算机甚至许多手持计算器也已经普遍具备二维及三维应用的图形功能。在个人计算机上也可以配用多种交互输人设备及图形软件包。对于高性能应…

校园网网络命令拓扑命令+详解集合

各位读者好&#xff0c;我发现&#xff0c;最近的收藏量比较多&#xff0c;为了大家方便&#xff0c;添加了一些各部分图和细节。 目录 配置总流程 1、总体拓扑图网段 2、命令 &#xff08;1&#xff09;内网配置 1&#xff09;二层交换机配置VLAN命令&#xff1a; 2&#x…

RabbitMQ学习笔记7(小滴课堂)SpringBoot2.X+SpringAMQP整合Rabbit

我们使用在线创建项目的方式&#xff1a; 这样就能快速的创建我们的项目了。 然后我们要去绑定我们的队列和交换机&#xff1a; 然后我们去写我们的测试类去测试一下&#xff1a; 我们去运行一下&#xff1a; 我们的依赖包不要引入错了。 我们可以看到我们的交换机和我们的队…

计算机基本组成和冯诺依曼机

计算机基本组成和冯诺依曼机 计算机的基本组成 计算机硬件组成 软件与硬件的逻辑等价性 冯诺依曼计算机硬件结构 冯诺依曼计算机工作原理 程序存储控制原理 计算机采用二进制的优势 高电平与低电平电压波动受影响的可能性会降低&#xff0c;抗干扰能力强 什么是冯诺依曼计算机…

基于无监督学习-关联规则的风险评估模型:更精准的预测!

一、引言 乳腺癌被认为是全球最常见的女性恶性肿瘤之一&#xff0c;对患者和公共健康造成了巨大的负担。准确评估乳腺癌风险是预防、诊断和治疗该疾病的关键。然而&#xff0c;乳腺癌风险估计面临着一些挑战&#xff0c;如数据的限制性、模型的复杂性和准确性等。因此&#xff…

JApiDocs|SpringBoot集成JApiDocs用以生成API文档

框架简介 JApiDocs和Swagger都是用于生成API文档的工具&#xff0c;它们各自有一些优点。下面是JApiDocs相较于Swagger的几个优点&#xff1a; 简单易用&#xff1a;JApiDocs相对来说更加简单易用&#xff0c;配置和使用都比较简单明了。它使用Java注解来描述API信息&#xff0…

手机兼职浪潮:揭秘在家赚钱的新机遇

科思创业汇 大家好&#xff0c;这里是科思创业汇&#xff0c;一个轻资产创业孵化平台。赚钱的方式有很多种&#xff0c;我希望在科思创业汇能够给你带来最快乐的那一种&#xff01; 如今&#xff0c;随着智能手机的普及和互联网的发展&#xff0c;手机兼职已经成为一种新的浪…