当前位置: 首页 > news >正文

leetcode174. 地下城游戏(java)

地下城游戏

  • leetcode174. 地下城游戏
    • 题目描述
  • 动态规划
    • 解题思路
    • 代码
  • 动态规划专题

leetcode174. 地下城游戏

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/dungeon-game

题目描述

恶魔们抓住了公主并将她关在了地下城 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

动态规划

解题思路

再找动态规划的转移方程时。
如果从头开始算。那么一路下来到右下角,我们要考虑两个问题:
一.是走到下一个格需要的最小血量
二是全路程走下来我们要走累加和最大的路径’。累加和越大需要的血量越少。
同时考虑两个问题,代码就变得很麻烦了,而且两个问题是两种优化,这两种优化可能会有冲突。
因此我们要换个思路,
从最后一个格往前推,在最后一个格需要多少血量.
如果Math.max(1 - dungeon(i,j),1).如果最后一格是不是负数,有1就好了,
这是最后一格的情况。
和前面联系到一起:那么转移方程就是:
dp[i][j]=max(min(dp[i+1][j],dp[i][j+1])−dungeon(i,j),1)
把 1 - 1 - dungeon(i,j) 换成前面需要最小的血量去减。换成了min(dp[i+1][j],dp[i][j+1])−dungeon(i,j);

代码

  public int calculateMinimumHP(int[][] dungeon) {int n = dungeon.length;int m = dungeon[0].length;int[][]dp = new int[n + 1][m + 1];for (int i = 0; i <= n; ++i) {Arrays.fill(dp[i], Integer.MAX_VALUE);}//走出最下角的格子,最少要有一的血量//把两个方向优化出来dp[n][m - 1] = 1;dp[n - 1][m] = 1;for(int i = n - 1;i >= 0;i--){for(int j = m - 1;j >= 0;j--){//上一次选择路线两个方向上最小值int min = Math.min(dp[i + 1][j],dp[i][j + 1]);//如果是整数 就取1 ,负数就取 min - dungeon[i][j]dp[i][j] = Math.max(min - dungeon[i][j],1);}}return dp[0][0];}

动态规划专题

打败怪兽的概率

leetcode688. 骑士在棋盘上的概率

凑零钱-钱币的组合有多少种II

最小路径和

最长回文子序列

数字转字符串,有多少种转化结果

leetcode.486. 预测赢家

走到指定位置有多少种方式

相关文章:

leetcode174. 地下城游戏(java)

地下城游戏 leetcode174. 地下城游戏题目描述 动态规划解题思路代码 动态规划专题 leetcode174. 地下城游戏 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/dungeon-game 题目描述 恶魔们抓住了公主并将她关在了地下城 …...

信号与系统复习笔记——傅里叶变换

信号与系统复习笔记——傅里叶变换 周期信号的傅里叶级数表示 特征函数 假设LTI系统的输入为 x ( t ) e s t x(t) e^{st} x(t)est 输出为&#xff1a; y ( t ) e s t ∗ h ( t ) ∫ − ∞ ∞ e s ( t − τ ) h ( τ ) d τ e s t ∫ − ∞ ∞ e − s τ h ( τ ) d…...

Allegor17.2版本WIN11系统CIS配置提示错误解决方案

错误提示&#xff1a; ERROR(ORCIS-6250): Unable to continue. Database access failed. Contact the database administrator to correct the following error(s), and then retry. ODBC Error Code: -1 Description: 在指定的 DSN 中&#xff0c;驱动程序和应用程序之间的体…...

Java设计模式七大原则-合成聚合复用原则

&#x1f9d1;‍&#x1f4bb;作者&#xff1a;猫十二懿 ❤️‍&#x1f525;账号&#xff1a;CSDN 、掘金 、个人博客 、Github &#x1f389;公众号&#xff1a;猫十二懿 合成-聚合复用原则 1、合成-聚合复用原则介绍 合成/聚合复用原则&#xff08;Composition/Aggregatio…...

SOFA Weekly|可信基础设施技术分论坛、Layotto 社区会议回顾与预告、社区本周贡献...

SOFA WEEKLY | 每周精选 筛选每周精华问答&#xff0c;同步开源进展 欢迎留言互动&#xff5e; SOFAStack&#xff08;Scalable Open Financial Architecture Stack&#xff09;是蚂蚁集团自主研发的金融级云原生架构&#xff0c;包含了构建金融级云原生架构所需的各个组件&am…...

Melody 监控(四十九)

当新的世界出现&#xff0c;请立即向他奔去 上一章简单介绍了Spring Boot Actuator详解(四十八), 如果没有看过,请观看上一章 一. JavaMelody 一.一 什么是 Java Melody JavaMelody是一个方便的Java或JavaEE Web 应用程序监控工具。 它允许自动存储由 Web 应用程序的实际操…...

Shell脚本管道符常用搭配命令

1.sort sort命令——以行为单位对文件内容进行排序&#xff0c;也可以根据不同的数据类型来排序比较原则是从首字符向后&#xff0c;依次按ASCII码值进行比较&#xff0c;最后将他们按升序输出。 sort [选项] 文件名 cat file | sort [选项] 常用选项 选项作用-n按照数字进行…...

基于html+mysql+Spring+mybatis+Springboot的Springboot宠物医院管理系统

运行环境: 最好是java jdk 1.8&#xff0c;我在这个平台上运行的。其他版本理论上也可以。 IDE环境&#xff1a; Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以&#xff0c;如果编译器的版本太低&#xff0c;需要升级下编译器&#xff0c;不要弄太低的版本 tomcat服务器环…...

算法模板(3):搜索(5):其他

搜索 模拟退火 模拟退火一个很关键的是&#xff0c;看看枚举到每一个方案是不是可能的。 3167. 星星还是树 在二维平面上有 n 个点&#xff0c;第 i 个点的坐标为 ( x i , y i ) (x_i,y_i) (xi​,yi​)。请你找出一个点&#xff0c;使得该点到这 n 个点的距离之和最小。这…...

AWS CodeWhisperer 心得体会:安装与使用

大家好&#xff0c;今天我要和大家分享一下我在使用 AWS CodeWhisperer 这个工具时的心得体会。首先&#xff0c;让我们了解一下什么是 AWS CodeWhisperer。 什么是 AWS CodeWhisperer&#xff1f; AWS CodeWhisperer 是一个用于帮助开发者在 AWS 云平台上更轻松地编写、测试…...

高级查询 — 子查询

关于嵌套查询&#xff08;子查询&#xff09; 1.概述 子查询是在一个查询中嵌套另一个查询的查询语句。内部查询从外部查询或数据库中提取数据&#xff0c;然后使用这些数据来执行内部查询。出现在其他语句中的 select 语句&#xff0c;称为嵌套查询或子查询。外部的查询语句…...

霍夫变换(Hough Transform)

文章目录 1. 什么是霍夫变换2. 霍夫直线检测2.1 霍夫直线检测的具体步骤2.2 霍夫直线检测的优缺点2.3 OpenCV中霍夫直线检测的应用2.3.1 标准霍夫检测2.3.2 概率霍夫检测 3. 霍夫圆检测4. 源码仓库地址 1. 什么是霍夫变换 霍夫变换(Hough Transform)是图像处理中的一种特征提取…...

【每日挠头算法题(2)】压缩字符串|仅执行一次字符串交换能否使两个字符串相等

文章目录 一、压缩字符串思路 二、仅执行一次字符串交换能否使两个字符串相等思路1&#xff1a;计数法思路2&#xff1a;模拟法 总结 一、压缩字符串 点我直达~ 思路 使用双指针法 大致过程如下&#xff1a; 使用双指针&#xff0c;分别读&#xff08;read&#xff09;&…...

V4L2框架解析

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、概览二、流程简介三、关键结构体四、模块初始化五、处理用户空间请求 一、概览 相机驱动层位于HAL Moudle与硬件层之间&#xff0c;借助linux内核驱…...

Trie树模板与应用

文章和代码已经归档至【Github仓库&#xff1a;https://github.com/timerring/algorithms-notes 】或者公众号【AIShareLab】回复 算法笔记 也可获取。 文章目录 Trie树&#xff08;字典树&#xff09;基本思想例题 Trie字符串统计code关于idx的理解 模板总结应用 最大异或对分…...

【华为OD统一考试B卷 | 200分】跳格子游戏(C++ Java JavaScript Python)

文章目录 题目描述输入描述输出描述用例C++javajavaScriptpython题目描述 地上共有N个格子,你需要跳完地上所有的格子,但是格子间是有强依赖关系的,跳完前一个格子后,后续的格子才会被开启,格子间的依赖关系由多组steps数组给出,steps[0]表示前一个格子,steps[1]表示st…...

该选哪个语言进修呢?

前言&#xff1a; 如今&#xff0c;计算机编程已经成为了许多工作领域中的必备技能。但是&#xff0c;现在的计算机语言有很多&#xff0c;这可能会让我们感到困惑&#xff1a;我应该从哪个语言开始呢&#xff1f;在这篇博客中&#xff0c;我们将详细分析当前流行的一些计算机…...

数据库实验三 数据查询一

任务描述 本关任务&#xff1a;按条件查询数据表的所有字段 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 如何查询数据表的所有字段 相关知识 查询数据表 命令格式&#xff1a; select * from 数据表 where 查询条件 任务要求 打开province数据库 第一题 查询街…...

【Python百日进阶-Web开发-Peewee】Day244 - 数据库 Postgresql、CockroachDB

文章目录 六、数据库6.1 初始化数据库6.2 使用 Postgresql6.2.1 隔离级别 6.3 使用 CockroachDB 六、数据库 http://docs.peewee-orm.com/en/latest/peewee/database.html PeeweeDatabase对象表示与数据库的连接。该类Database使用打开数据库连接所需的所有信息进行实例化&…...

Vue 中的列表渲染

Vue 中的列表渲染 在 Vue 中&#xff0c;列表渲染是非常常见的操作。它允许我们将一个数组中的数据渲染为一个列表&#xff0c;从而实现数据的展示和交互。在本文中&#xff0c;我们将探讨 Vue 中的列表渲染的基本原理和用法&#xff0c;并给出一些实例代码来帮助读者更好地理…...

如何在Windows上轻松安装APK文件:告别模拟器的完整指南

如何在Windows上轻松安装APK文件&#xff1a;告别模拟器的完整指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经想要在Windows电脑上直接运行Android应用…...

从虚拟到物理:电子系统原型设计的工程化策略与实战解析

1. 原型设计全景&#xff1a;从概念到实物的工程化思维 在电子系统设计领域&#xff0c;尤其是面对航空航天、汽车电子、通信设备这类高复杂、高可靠性要求的项目时&#xff0c;“原型”这个词的分量远超一个简单的模型。它不是一个可有可无的步骤&#xff0c;而是连接创意与产…...

learn claude code S11 自主 Agent 详解笔记

S11 自主 Agent 详解笔记基于 s11_autonomous_agents.py 源码逐行分析&#xff0c;配合 s11-autonomous-agents.md 设计思路。一、问题&#xff1a;队友需要有人持续指派任务 s09-s10 的 teammate 有一个尴尬的空白期&#xff1a;完成当前任务后进入 idle&#xff0c;然后呢&am…...

一次讲清本地大模型语音识别三件套:Vulkan 为什么是加速主线,而说话人识别为何成为唯一短板

把 whisper.cpp、sherpa-onnx、llama.cpp 三套引擎整合到一起&#xff0c;再用 Electron 包成桌面应用&#xff0c;这个技术思路本身并不复杂。真正考验工程功力的&#xff0c;是面向完全不懂技术的最终端用户&#xff0c;怎样让这些引擎尽可能“一键加速”&#xff0c;同时还不…...

Python热重载工具Reloadium:实现函数级代码热更新与AI辅助开发

1. 项目概述&#xff1a;Reloadium&#xff0c;一个改变Python开发工作流的“时光机”如果你和我一样&#xff0c;是个常年泡在Python项目里的开发者&#xff0c;那你一定对“修改代码 -> 停止程序 -> 重新运行 -> 等待启动”这个循环深恶痛绝。尤其是在调试Web后端&a…...

AI00 RWKV Server:基于Vulkan的轻量级大模型本地推理部署指南

1. 项目概述&#xff1a;一个为RWKV模型打造的轻量级、高性能推理服务器 如果你正在寻找一个能让你在个人电脑上&#xff0c;甚至是集成显卡上&#xff0c;就能流畅运行大语言模型&#xff08;LLM&#xff09;的解决方案&#xff0c;那么AI00 RWKV Server绝对值得你花时间深入…...

AI智能体如何革新LaTeX写作:PaperDebugger深度集成Overleaf实践

1. 项目概述&#xff1a;当AI助手遇上LaTeX写作如果你是一名科研工作者、研究生&#xff0c;或者任何需要和LaTeX文档打交道的人&#xff0c;那么下面这个场景你一定不陌生&#xff1a;深夜&#xff0c;你对着Overleaf编辑器里密密麻麻的代码和公式&#xff0c;反复修改着论文的…...

VMware 17 Pro 中 Ubuntu 虚拟机共享 Windows 文件夹(完美踩坑版)

前言 很多小伙伴在使用 VMware 虚拟机时&#xff0c;都会遇到一个头疼的问题&#xff1a;如何在主机和虚拟机之间快速传递文件&#xff1f; 使用 U 盘拷贝&#xff1f;来回插拔太麻烦&#xff1b;用 scp 命令传文件&#xff1f;对于新手来说又有点门槛。其实&#xff0c;VMware…...

本地优先 Web 应用开发:React/SQLite 前端、Supabase 后端与 PowerSync 同步引擎实践

本地优先 Web 应用开发&#xff1a;React/SQLite 前端、Supabase 后端与 PowerSync 同步引擎的实践与优势并非每天都会出现全新架构&#xff0c;如今浏览器内的 SQLite 结合响应式 SQL 和自动同步功能出现了&#xff0c;它能让前端即时交互&#xff0c;还能保持与后端数据一致&…...

基于MCP协议构建AI知识库:解决会话失忆,实现知识持久化

1. 项目概述&#xff1a;让AI拥有自己的“亚历山大图书馆”如果你和我一样&#xff0c;长期与Claude Code、Cursor这类AI编程助手打交道&#xff0c;一定会遇到一个核心痛点&#xff1a;会话失忆。每次开启一个新对话&#xff0c;AI助手就像一张白纸&#xff0c;它对你项目的历…...