【算法挨揍日记】day21——64. 最小路径和、174. 地下城游戏

 64. 最小路径和

64. 最小路径和

题目描述:

给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:每次只能向下或者向右移动一步。

解题思路: 

状态表示:dp【i】【j】表示到达(i,j)位置后的最小路径和

状态转移方程:

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

初始化:dp[0][i]=INT_MAX,dp[i][0]=INT_MAX,dp[0][1]=0

填表顺序:左到右

返回值:dp【len1】【len2】

解题代码:

class Solution {
public:
    int minPathSum(vector<vector<int>>& grid) {
        int len1=grid.size();
        int len2=grid[0].size();
        vector<vector<int>>dp(len1+1,vector<int>(len2+1,INT_MAX));
        dp[0][1]=0;
        for(int i=1;i<=len1;i++)
        {
            for(int j=1;j<=len2;j++)
            {
                dp[i][j]=min(dp[i-1][j],dp[i][j-1])+grid[i-1][j-1];
            }
        }
        return dp[len1][len2];
    }
};

 174. 地下城游戏

174. 地下城游戏

题目描述: 

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

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

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

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

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

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

解题思路:

状态表示:dp【i】【j】代表以(i,j)位置为起点到终点(len1-1,len2-1)的最小生命值

状态转移方程:

假设(i,j)到终点的最小生命值为x

我们就两种走法,向右走或者向下走

当向下走的时候:x+dungeon[i][j]>=dp[i+1][j]

x>+=dp[i+1][j]-dungeon[i][j]

当向下走的时候:x+dungeon[i][j]>=dp[i][j+1]

x>+=dp[i][j+1]-dungeon[i][j]

因此状态转移方程为:dp[i][j]=min(dp[i+1][j],dp[i][j+1])-dungeon[i][j]

这里值得注意的是dp【i】【j】可能为负数,因此要dp[i][j]=max(1,dp[i][j])

初始化:dp[len1][i]和dp[i][len2]都为INT_MAX

dp[len1-1][len2]和dp[len1][len2-1]为1

填表顺序:从右到左,从下到上

返回值:dp[0][0]

解题代码:

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

量化交易:建立趋势跟踪策略的五个指标

什么是趋势跟踪策略&#xff1f; 趋势跟踪策略是只需需顺势而为的策略&#xff0c;即在价格上涨时买入&#xff0c;在价格开始下跌时卖出。在趋势跟踪策略中&#xff0c;人们的目标不是预测或预测&#xff0c;而只是关注市场上的任何新兴趋势。 趋势是如何出现的&#xff1f;…

毅速丨3D打印透气钢正在被各行业广泛应用

随着制造技术的发展&#xff0c;企业对生产效率和产品品质的进一步提高&#xff0c;3D打印透气钢已逐渐在各行业中广泛应用。传统的透气钢制造方法&#xff0c;如粉末冶金和扩散焊&#xff0c;通常只能加工出透气钢的嵌块&#xff0c;使用时需要进行镶嵌&#xff0c;存在强度不…

十八、Linux任务调度crond和at

1、crond任务调度 crond进行 定时任务的设置 概述 任务调度&#xff1a;是指系统在某个时间执行的特定的命令或程序。 任务调度分类&#xff1a;1.系统工作&#xff1a;有些重要的工作必须周而复始地执行。如病毒扫描等 个别用户工作&#xff1a;个别用户可希望执行某些程序…

Kotlin学习(一)

Kotlin学习&#xff08;一&#xff09; 1.使用IDEA构建Kotlin项目 新建工程即可 我这里选择的Build System是IntelliJ&#xff0c;虽然我没用过但是这是Kotlin基础学习应该不会用到其他依赖 2.Hello World package com.simonfun main(args:Array<String>){println(&q…

list,dict使用方法

list, dict的使用 list的使用&#xff1a; ori_list [1, 2, 3] append: 使用append为列表增加1个元素4 输出增加元素之后的列表 ori_list [1, 2, 3] ori_list.append(4) print(ori_list)extend: 给定列表[8, 7, 6],将ori_list和给定的列表进行合并 输出合并后的列表 ori_l…

统信UOS通过源码安装软件提示“configure: error: cannot run C compiled programs.”错误

1. 问题说明 使用源码的方式安装git软件&#xff0c;安装过程中出现两个错误。 编译错误“cannot run C compiled programs” XC:~/Downloads/git-2.42.1$ ./configure --prefix/home/software/git-2.42.1 configure: Setting lib to lib (the default) configure: Will try…

将word中的表格无变形的弄进excel中

在上篇文章中记录了将excel表拷贝到word中来&#xff1a; 记录将excel表无变形的弄进word里面来-CSDN博客 本篇记录&#xff1a;将word中的表格无变形的弄进excel中。 1.按F12&#xff0c;“另存为...”&#xff0c;保存类型&#xff1a;“单个文件页面”&#xff0c;保存。…

C++ Qt 学习(十):Qt 其他技巧

1. 带参数启动外部进程 QProcess 用于启动外部进程int QProcess::execute(const QString &program, const QStringList &arguments);QObject *parent; ... QString program "./path/to/Qt/examples/widgets/analogclock"; QStringList arguments; argument…

ESP32 MicroPython 蜂鸣器及传感器的使用⑦

ESP32 MicroPython 蜂鸣器及传感器的使用⑦ 1、蜂鸣器奏乐2、实验目的3、实验内容5、实验结果6、小车传感器应用7、实验目的8、实验内容9、参考代码10、实验结果 1、蜂鸣器奏乐 我们小车底板配置有蜂鸣器&#xff0c;下面我们来学习如何去利用蜂鸣器演奏乐曲 2、实验目的 学…

如何将 Docsify 项目部署到 CentOS 系统的 Nginx 中

文章目录 第一步&#xff1a;准备 CentOS 服务器第二步&#xff1a;安装 Node.js 和 Docsify第三步&#xff1a;初始化 Docsify 项目第四步&#xff1a;本地预览 Docsify 项目第五步&#xff1a;配置 Nginx 服务器第六步&#xff1a;重启 Nginx 服务器拓展&#xff1a;使用 HTT…

VisualBox7.0.12 主机和宿舍互PING设置

设置成桥接模式 主机设置 虚拟机设置

day07_数组初识

数组的概述 数组就是用于存储数据的长度固定的容器&#xff0c;保证多个数据的数据类型要一致。 数组适合做一批同种类型数据的存储 数组是属于引用数据类型&#xff0c; 数组变量名中存储的数组在内存中的地址信息。 数组中的元素可以是基本数据类型&#xff0c;也可以是引用…

[qemu逃逸] DefconQuals2018-EC3

前言 一道简单的套壳堆题.原本题目环境为 ubu16, 我这里使用的是 ubu18 设备逆向 qemu-system-x86_64 只开了 Canary 和 NX 保护. 比较简单, 主要逻辑在 mmio_write 里面, 其实现了一个菜单堆, 具有增删改的功能: 但是在释放堆块时并没有置空, 所以这里存在 UAF. 而程序还直…

.Net中Redis的基本使用

前言 Redis可以用来存储、缓存和消息传递。它具有高性能、持久化、高可用性、扩展性和灵活性等特点&#xff0c;尤其适用于处理高并发业务和大量数据量的系统&#xff0c;它支持多种数据结构&#xff0c;如字符串、哈希表、列表、集合、有序集合等。 Redis的使用 安装包Ser…

IIC通信协议

IIC是串行半双工同步总线 I2C总线为两线制&#xff0c;只有两根双向信号线&#xff0c;一根是数据线SDA&#xff0c;另一根是时钟线SCL&#xff0c;IIC总线外接两个上拉电阻作用&#xff1a;在总线处于空闲状态&#xff0c;总线处于高电平状态 IIC总线硬件连接 1、IIC总线支…

tamarin运行

首先我们找到安装tamarin的文件位置&#xff0c;找到以后进入该文件夹下 ubuntuubuntu:~$ sudo find / -name tamarin-prover /home/linuxbrew/.linuxbrew/var/homebrew/linked/tamarin-prover /home/linuxbrew/.linuxbrew/Cellar/tamarin-prover /home/linuxbrew/.linuxbrew/…

URAT串口通信协议

UART是异步串行全双工总线&#xff0c;面向设备和设备之间的连接 配置相关内容 1、串口为串行通讯方式&#xff0c;代表一个时钟周期&#xff0c;只可以收发一位数据 2、115200代表什么&#xff0c;以及115200单位 单位&#xff1a;bps(比特率、二进制/秒) 115200代表&#…

泉盛UV-K5/K6全功能中文固件

https://github.com/wu58430/uv-k5-firmware-chinese/releases 主要功能&#xff1a; 中文菜单 许多来自 OneOfEleven 的模块&#xff1a; AM 修复&#xff0c;显著提高接收质量长按按钮执行 F 操作的功能复制快速扫描菜单中的频道名称编辑频道名称 频率显示选项扫描列表分配…

mysql 实现去重

个人网站 首发于公众号小肖学数据分析 1、试题描述 数据表user_test如下&#xff0c;请你查询所有投递用户user_id并且进行去重展示&#xff0c;查询结果和返回顺序如下 查询结果和返回顺序如下所示 解题思路&#xff1a; (1) 对user_id列直接去重&#xff1a; &#xff…

小程序开通电子发票

总目录 文章目录 总目录前言结语 前言 随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很多人都开启了学习机器学习&#xff0c;本文就介绍了机器学习的基础内容。 首先登录商户号&#xff1a;https://pay.weixin.qq.com/index.php/core/home/lo…