leetcode 174.地下城游戏

思路:dp。

原先的时候其实是想这样用dfs的做法进行解答的,但是呢,是不对的。

这里作者dfs的思路是:首先找出来最小路径和,然后再处理最小路径和这条路径里面的初始值。但是,后来发现这样不一定是最优解,因为当我们的路径和并不是最小值的时候,也可能得到最小的初始值。官方案例上应该已经给出来实例了。

从左上到右下,dp[i][j]的意思就是:从起点到(i,j)的最小初始值多少。这样的话我们需要考虑两个问题:1.我们现在走的路径和是多少,是不是最优解?2.我们现在走到的这条路径和是不是最小初始值?这样的话我们需要考虑这种两个值,递推的不现实,上面也说了,如果顾及到前者,后者不一定是最优。所以我们需要换一种思路。

如果说我们正向推导不行,那么我们或许可以试一试反向推导。也就是说,我们从右下向左上进行推导。这给我们提供一种思路,就是正向推导行不通的时候我们可以试一试反向推导。

反向推的话,我们的dp就变成了:从(i,j)到终点的最低初始值。这样的话,我们就不需要顾及到路径和的问题了。因为我们现在已经在(i,j)这个坐标里面了,那么前面的路径和一定是不小于当前的最低初始值的,也就是说我们已经定下来了路径和一定是合理的,所以我们就相当于只考虑最低初始值的问题了。那么我们就只推它了。

我们也知道,我们站在这个位置有两条路可以选:一个就是向下走,一个就是向右走。那么我们需要知道,这两个路我们需要走哪个?当然是选择其中小的一个,因为我们求的是最低初始值。这样的话,我们需要初始化dp,这样的话,我们就需要为dp数组赋值一个很大的值以至于我们可以取到最小值。

那么,状态方程就出来了:dp[i][j]=max(1,min(dp[i+1][j],dp[i][j+1])-dungeon[i][j])。看右边这子,为什么需要-dungeon[i][j]?由于我们还并没有走到下一步,并且还需要考虑到当前的值。

另外,为什么要和1作比较呢?我们从题目中可以知道,骑士的初始值并不能<=0。所以我们的初始值最低是1,所以如果右边这个式子<=0,那么我们就自动给它赋值成1.

上代码:

class Solution {
public:int calculateMinimumHP(vector<vector<int>>& dungeon) {int n=dungeon.size();int m=dungeon[0].size();vector<vector<int>>dp(n+1,vector<int>(m+1,INT_MAX));dp[n-1][m]=dp[n][m-1]=1;for(int i=n-1;i>=0;i--){for(int j=m-1;j>=0;j--){int mins=min(dp[i+1][j],dp[i][j+1]);dp[i][j]=max(1,mins-dungeon[i][j]);}}return dp[0][0];}
};

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

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

相关文章

LeetCode 105.从前序与中序遍历构造二叉树

题目描述 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder [9,3,15,20,7] 输出: [3,9,20,null,nul…

Dockerfile 里 ENTRYPOINT 和 CMD 的区别

ENTRYPOINT 和 CMD 的区别&#xff1a; 在 Dockerfile 中同时设计 CMD 和 ENTRYPOINT 是为了提供更灵活的容器启动方式。ENTRYPOINT 定义了容器启动时要执行的命令&#xff0c;而 CMD 则提供了默认参数。通过结合使用这两个指令&#xff0c;可以在启动容器时灵活地指定额外的参…

【LeetCode刷题记录】110. 平衡二叉树

110 平衡二叉树 给定一个二叉树&#xff0c;判断它是否是平衡二叉树 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;root [1,2,2,3,3,null,null,4,4] 输出&#xff1a;false 示例 3&…

vue3项目引入VueQuill富文本编辑器(成功)及 quill-image-uploader 图像模块(未成功)

tip&#xff1a;重点解释都写在代码注释里了&#xff0c;方便理解&#xff0c;所以看起来比较密集 富文本基本使用 项目文件夹路径安装依赖 npm install vueup/vue-quilllatest --save 全局注册&#xff1a;main.js // main.js// 自己项目的一些配置&#xff08;只放了主要…

EditText与NestScrollView嵌套使用时,滑动冲突处理

期望 在Android开发中经常会有在一个大页面中&#xff0c;包含一个EditText的情况&#xff0c;一般情况下&#xff0c;大页面会通过NestScrollView或者ScrollView当作根View。 于是在布局文件中&#xff0c;我们常常这么写&#xff1a; <?xml version"1.0" en…

HTTP方式在线访问Hadoop HDFS上的文件解决方案

背景&#xff1a; 在做大数据和大模型产品的时候&#xff0c;方式设计的是将文件放在hdfs上进行管理&#xff0c;前几天遇到一个需求&#xff1a;需要通过http的方式去访问hdfs上的问题&#xff0c;以前基本上都是通过hdfs://hadoop01:9000,去访问文件&#xff0c;于是经过一番…

注册表获取autoCAD安装位置

注意事项 注意&#xff1a;①64位操作系统注册表会重定向&#xff0c;RegOpenKeyEx第4个参数得加上KEY_WOW64_64KEY&#xff1b;②RegOpenKeyEx遍历子项时注意第2和第4参数&#xff0c;参考图&#xff1a; ③RegQueryValueEx同样得注意第6参数 完整代码 std::unordered_map…

基于ssm+vue+Mysql的药源购物网站

开发语言&#xff1a;Java框架&#xff1a;ssmJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;Maven3.…

【Redis基础】Redis知识体系详解-Redis概念和基础

1. 什么是Redis Redis是一款用C语言编写的key-value存储系统&#xff08;键值存储系统&#xff09;&#xff0c;支持丰富的数据类型&#xff0c;如&#xff1a;String、list、set、zset、hash。 Redis是一种支持key-value等多种数据结构的存储系统。可用于缓存&#xff0c;事…

SpringBoot / SpringCloud 注册与发现

SpringBoot / SpringCloud EnableDiscoveryClient与EnableEurekaClient区别 在使用Spring Cloud feign使用中在使用服务发现的时候提到了两种注解&#xff0c;一种为EnableDiscoveryClient,一种为EnableEurekaClient,用法上基本一致。 spring cloud中discovery service有许多…

C#(C Sharp)学习笔记_方法(Medthod)【十六】

什么是方法&#xff1f; 在编程中&#xff0c;方法&#xff08;Method&#xff09;是一个执行特定操作的代码块。它是一种将逻辑封装起来的方式&#xff0c;使得代码更加模块化、重用性更高&#xff0c;并且易于维护。以下是方法的一些关键特性&#xff1a; 封装性&#xff1a…

【WEEK10】学习目标及总结【Spring Boot】【中文版】

学习目标&#xff1a; 学习SpringBoot 学习内容&#xff1a; 参考视频教程【狂神说Java】SpringBoot最新教程IDEA版通俗易懂MVC自动配置原理员工管理系统 准备工作首页实现 学习时间及产出&#xff1a; 第十周MON~TUE 2024.4.29【WEEK10】 【DAY1】MVC自动配置原理【中文版…

使用Spring Boot、Redis和Spring Cache实现高效缓存

在当今互联网应用开发中&#xff0c;性能是至关重要的因素之一。随着用户量的增加和数据量的膨胀&#xff0c;有效地管理数据的访问和处理变得愈发重要。 在这个背景下&#xff0c;缓存成为了提升应用性能的常用手段之一。本文将介绍如何利用Spring Boot、Redis以及Spring Cac…

Unity编辑器扩展

Unity编辑器扩展 引言 在游戏开发领域&#xff0c;Unity因其强大的功能和灵活性而备受欢迎。Unity的编辑器扩展能力尤其突出&#xff0c;它允许开发者自定义编辑器界面和功能来满足特定的开发需求。通过编辑器扩展&#xff0c;我们可以优化工作流程&#xff0c;提高生产力&am…

Cokejogo巴西 电子游戏源码 游戏网站源码 电子游戏合集 电子游戏软件下载 游戏源码(带安装教程)

Cokejogo巴西pg电子游戏源码/H5PC端 前端vue编译后后端PHP/修复图片资源失效 后端测试环境&#xff1a;Linux系统CentOS7.6、宝塔、PHP7.2、MySQL5.6&#xff0c;根目录public&#xff0c;伪静态thinkPHP&#xff0c;开启ssl证书 源码下载&#xff1a;https://download.csdn.n…

CUDA内存模型

核函数性能并不只与线程束的执行有关。 CUDA内存模型概述 GPU和CPU内存模型的主要区别是&#xff0c;CUDA编程模型能将内存层次结构更好地呈现给用户&#xff0c;能让我们显示的控制它的行为。 对程序员来说&#xff0c;一般有两种类型的存储器&#xff1a; 可编程的&#x…

JSP和tomcat

JSP&#xff08;JavaServer Pages&#xff09;是一种用于开发动态Web内容的技术&#xff0c;它允许开发者将Java代码嵌入到HTML页面中。JSP页面在服务器端被解析并转换成Servlet&#xff0c;然后由Servlet容器&#xff08;比如Tomcat&#xff09;执行。JSP允许开发者在页面中使…

YOLO系列改进,自研模块助力涨点

目录 一、原理 二、代码 三、添加到YOLOv5中 一、原理 论文地址:

截取视频第一帧当做封面

看了好多处理视频的框架 比如ffmpeg&#xff0c;很多都需要依赖安装第三方插件&#xff0c;比较麻烦&#xff0c;找到一个内嵌进去不需要额外安装的&#xff1a;jcodec 一 首先代码中添加依赖 <!--视频生成预览图用--><dependency><groupId>org.jcodec</…

企业职能部门定岗定编项目如何做?

某国家级高新技术开发区成立于上世纪90年代&#xff0c;位于南方某市&#xff0c;地处三省交界处&#xff0c;是直接由该省委省政府创办的全省首批高新技术开发区。该开发区面积达到300平方公里&#xff0c;辖区人口30万人。历经数十年发展&#xff0c;在省委省政府的高度重视下…