动态规划-路径问题——174.地下城游戏

news2024/11/27 16:29:49

1.题目解析

题目来源:174.地下城游戏 

测试用例 

2.算法原理

1.状态表示

通常dp[i,j]可以表示终点也可以表示起点,在本题中如果表示为终点,即勇士到[i,j]位置所需要的最小生命值,但是由于后续位置的未知无法向后继续判断,无解

所以在本题中将dp[i,j]表示为起点,即以[i,j]位置为起点到公主位置所需要的最小生命值,这样表示可以不被未知数据影响

2.状态转移方程

本题dp[i,j]表示以[i,j]位置为起点到公主所需要的最小生命值,所以可以列出下列表达式:dp[i][j]+d[i][j] >= min(dp[i+1][j],dp[i][j+1]),含义为勇士以[i,j]位置为起点并拾取该位置道具后的生命值一定大于等于下一个位置的生命值,否则就不能解救公主,下一个位置是消耗生命值较小可以到达的位置,所以对两个位置取Min值,由于取最小生命值,所以最终的状态转移方程就是:dp[i][j] = min(dp[i+1[j],dp[i][j+1]) - d[i][j],由上面式子化简得到 

3.初始化

本题需要从后向前填表,所以初始化时的虚拟位置设置在最下面与最右面一行一列,并且需要取min因此在公主位置必须保证勇士至少有一滴血,则将该位置的下面与右边虚拟位置初始化为1,其他位置不能影响dp表真实数据,则设置为INT_MAX 

4.填表顺序

从下向上,每一行从右向左 

5.返回值

返回从左上角开始为起点救出公主需要的最小生命值,则直接返回dp表的第一个元素dp[0][0] 

3.实战代码 

class Solution {
public:
    int calculateMinimumHP(vector<vector<int>>& d) 
    {
        int m = d.size();
        int n = d[0].size();

        //初始化
        vector<vector<int>> dp(m+1,vector<int>(n+1,INT_MAX));
        dp[m][n-1] = dp[m-1][n] = 1;

        for(int i = m-1;i >= 0;i--)
        {
            for(int j = n-1;j >= 0;j--)
            {
                //以[i,j]位置为起点到公主所在位置需要的生命值
                dp[i][j] = min(dp[i+1][j],dp[i][j+1]) - d[i][j];
                //如果下个位置是个很大的雪豹,说明负血量也可以到下个位置,
                //但是显然不符合题目,所以将血量置为1初始值
                dp[i][j] = max(1,dp[i][j]);
            }
        }
        //返回以左上角为起点救出公主需要的生命值
        return dp[0][0];
    }
};

 

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

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

相关文章

如何判断外包建站公司靠谱与否?2024外包网站设计公司哪家好top3

要知道一家网站建设公司靠不靠谱&#xff0c;看他们合作过哪些公司就能知道个大概。 如果服务对象有各行业的头肩部企业&#xff0c;那这家网站建设公司在专业性上肯定是有保障的。 但是&#xff0c;靠谱并不意味着适合自己。 靠谱的网站建设公司其实在技术上都大差不差&…

我用这四款翻译工具,轻松搞定英文在线翻译

作为一名喜欢搜罗各种办公软件的打工人&#xff0c;今天我要和大家聊聊一个我们工作中不可或缺的技能——英文翻译。首先&#xff0c;我们得承认&#xff0c;翻译工作有时候真的很让人头疼&#xff0c;尤其是当我们面对一堆专业术语和长篇大论时。但自从我发现了这些翻译神器&a…

Linux系统:apt-get update 和apt update区别

apt-get update 和apt update区别 ‌apt-get update和apt update的主要区别在于它们所属的命令集以及在现代Ubuntu系统中的使用推荐。‌ ‌所属命令集‌&#xff1a;apt-get update是apt-get命令的一部分&#xff0c;而apt update是apt命令的一部分。apt是apt-get的替代工具&am…

《Image Processing GNN: Breaking Rigidity in Super-Resolution》CVPR2024

摘要 这篇论文提出了一种名为Image Processing Graph Neural Networks (IPG) 的模型&#xff0c;旨在通过利用图的灵活性来突破超分辨率&#xff08;Super-Resolution, SR&#xff09;中的固有刚性问题。在现有的SR模型中&#xff0c;无论是基于卷积神经网络&#xff08;CNNs&…

新手小白想快速上手Mac的使用必看问题

相信不论是现在还是将来&#xff0c;肯定还是会有Mac小白的存在&#xff0c;对于大多数人来说&#xff0c;从小接触Windows的机会比较多&#xff0c;Windows的使用也是比较多&#xff0c;但是有些朋友在大学的时候想体验一下Mac的感觉&#xff0c;于是果断下单&#xff0c;又或…

[C语言] 函数详解:库函数与自定义函数

文章目录 函数的概念库函数和自定义函数库函数使用库函数示例常用库函数及头文件 自定义函数自定义函数的基本结构示例&#xff1a;实现两个数的求和函数自定义函数的好处 函数的返回值有返回值的函数无返回值的函数 函数的声明与调用声明函数在另一个文件中调用函数示例&#…

51单片机的智能小区安防系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块时钟模块温度传感器烟雾传感器CO传感器红外感应传感器IC卡蓝牙继电器按键、蜂鸣器、LED等模块构成。适用于智能小区安防、智能家居安防等相似项目。 可实现功能: 1、LCD1602实时显示北京时间、温度、烟雾浓度和CO浓…

Kylin系统安装VMwareTools工具

如下图所示&#xff0c;安装好Kylin系统之后&#xff0c;还未安装VMwareTools工具&#xff0c;导致系统画面无法填充虚拟机 正常安装了VMwareTools工具后的系统画面 所以&#xff0c;接下来我们介绍一下如何在Kylin系统下安装VMwareTools工具 首先&#xff0c;点击VMware工具栏…

Android常用布局

目录 布局文件中常见的属性 1. 基本布局属性 1&#xff09;android:layout_width 2&#xff09;android:layout_height 3&#xff09;android:layout_margin 4&#xff09;android:padding 2. 线性布局 (LinearLayout) 属性 1&#xff09;android:orientation 2&#xff09;and…

深度学习神经网络笔记--卷积神经网络

为什么要用卷积 捕捉特征&#xff0c;如文末的图&#xff09;不受位置影响&#xff08;左右&#xff0c;前后&#xff0c;上下&#xff09;可以参考下图&#xff1a;卷积操作 可移动的小窗口与图像数据逐元素相乘后相加小窗口是滤波器&#xff0c;卷积核&#xff0c;&#xff0…

毕业设计之—基于ManTra-Net的图像篡改检测方法研究与应用实现

1.摘要 随着互联网、社交媒体和简易图像操作工具的普及&#xff0c;图像篡改带来的问题日益严重。为了解决这一问题&#xff0c;研究者们利用深度卷积神经网络来检测图像篡改并定位篡改区域。为此我们训练了一个ManTra-Net模型&#xff0c;该模型以TensorFlow为后端&#xff0c…

什么是网络安全等级保护?企业如何建立安全系统?一篇带你快速了解→:

等保测评的定义与目的 等保测评旨在评估信息系统的安全性&#xff0c;并根据评估结果给予相应的安全等级。该等级反映了信息系统在保护国家安全、经济安全、社会公共利益以及个人合法权益方面的能力。通过等保测评&#xff0c;可以确保信息系统符合国家法律法规的要求&#xf…

DSP CMD文件使用

背景描述: 在CCS编译代码时出现如下警告 解决方法: 找到cmd文件(这里是用的系统自动生成的)&#xff0c;在Section部分找到对应的核 #ifdef CORE7.text > CORE7_L2_SRAM.stack > CORE7_L2_SRAM.bss > CORE7_L2_SRAM.cio &g…

(28)QPSK调制信号使用矩形脉冲成形的误符号率和误比特率MATLAB仿真

文章目录 前言一、系统模型说明二、MATLAB仿真代码三、MATLAB仿真结果四、仿真结果分析 前言 在QPSK通信系统仿真时&#xff0c;经常会加入调制信号的脉冲成形模块&#xff0c;本文将讨论在这种情况下信道的信噪比该如何设置&#xff0c;并给出MATLAB仿真代码&#xff0c;画出…

滑动窗口_⽔果成篮找到字符串中所有字⺟异位词

⽔果成篮 904. 水果成篮 - 力扣&#xff08;LeetCode&#xff09; 相当于求数字种类不超过2的最长字字符串 我们先看一看例4.从第一个元素开始最长字符串3331&#xff0c;下一次从第二个位置数吗&#xff1f;没必要&#xff0c;因为只有当字符串中数字种类变为1时&#xff0c;…

库的相关使用

1.1 库的概念 库是由.c文件编译生成的二进制文件。 库的内部就是各种函数的实现。 windows中库的格式&#xff1a; xxx.dll -- 动态库 xxx.lib -- 静态库 linux中库的格式&#xff1a; libxxx.a --- 静态库 libxxx.so --- 动态库 2.1 静态库的制作和使用 2.1.1 静态库的…

9.2分新剧教你如何面对生活的苦涩与温暖

如果你最近在寻找一部既温暖治愈&#xff0c;又能引发思考的好剧&#xff0c;《住宅区的两人》无疑是个不错的选择。虽然没有大起大落的情节&#xff0c;但它却用温柔的叙事方式和细腻的情感刻画赢得了观众的心&#xff0c;目前在豆瓣上拿下了9.2的高分。这部剧带给人的不仅仅是…

图片懒加载(lazyload )

图片懒加载 懒加载&#xff08;Lazy Loading&#xff09;是一种计算机编程技术&#xff0c;用于延迟初始化对象或资源&#xff0c;直到它们实际需要使用时才进行加载或初始化。这种技术可以提高程序的启动速度和性能&#xff0c;减少不必要的资源消耗&#xff0c;特别是在处理…

基于头脑风暴优化的模糊PI控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 头脑风暴优化&#xff08;Brain Storm Optimization, BSO&#xff09;是一种受人类集体创新过程启发的群体智能算法。它通过模拟团队成员之间的信息交流和想法生成来寻找最优解…

【含开题报告+文档+PPT+源码】基于SpringBoot+Vue医药知识学习与分享平台的设计与实现

开题报告 本论文介绍了一个名为岐黄之家的知识学习与分享平台的设计与实现。该平台旨在为用户提供一个交流、学习和分享医药知识的空间。论文首先介绍了中医院交流平台的背景和相关研究现状。随着互联网的快速发展&#xff0c;中医学的学习和交流需求逐渐增多&#xff0c;因此…