[动态规划] (九) 路径问题:LeetCode 64.最小路径和

[动态规划] (九) 路径问题:LeetCode 64.最小路径和

文章目录

      • [动态规划] (九) 路径问题:LeetCode 64.最小路径和
        • 题目解析
        • 解题思路
          • 状态表示
          • 状态转移方程
          • 初始化和填表顺序
          • 返回值
        • 代码实现
        • 总结

64. 最小路径和

image-20231106195827689

题目解析

(1) 从左上角到右下角

(2) 只能向右或者向下移动’

(3) 使路径上数字最小

解题思路

路径问题我们已经做过很多了,可以总结出一些经验。

我们先按照经验来做,不成功就换另一种经验。

状态表示

dp[i] [j]:以(i,j)为终点(或者起点,哪种简单且能做出题用哪种),所得的路径和。

状态转移方程

dp(i,j)的路径和取决于==上一个位置(dp[i-1] [j])和左一个位置(dp[i] [j-1])==的较小值

当然还要加上(i,j)当前位置的值。

所以:

dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i][j]
初始化和填表顺序
  • 初始化

和以往一样,为了方便填表我们多开辟一列和一行。

我们是访问i-1、j-1的位置,一般也就初始化左上角周围的位置。

由于1号位置受到2号和3号的影响,为了不影响结果,我们赋值为0,让它只取原表的当前位置即可。

image-20231106210717683

而4、5、6、7、8号位置,避免影响结果,初始化为整型最大值即可,因为当初始化为0时,就会取这些位置的0而不是dp数组中的值。

  • 填表顺序

一列一列填即可。

返回值

我们扩大一列和一行,返回(m,n)位置的值即可。

dp[m] [n]

看到这里就可以去尝试实现代码了,之后再来看下面的内容。


代码实现
class Solution {
public:int minPathSum(vector<vector<int>>& grid) {//创建dp数组int m = grid.size(), n = grid[0].size();vector<vector<int>> dp(m+1, vector<int>(n+1, INT_MAX));//初始化dp[1][0] = dp[0][1] = 0;//填表for(int i = 1; i <= m; i++)for(int j = 1; j <= n; j++)dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i-1][j-1];//返回值return dp[m][n];}
};

image-20231106211206420

总结

细节1:方便初始化,我们将dp数组中的值都定义为INT_MAX,再把需要的位置初始化为0即可。

细节2:扩大了一列和一行,下标对应到原表(grid)时就需要调整为(i-1,j-1)。
细节3:一般最小和问题,都需要注意初始化时,记得把不相干位置初始化为整数最大值。

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

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

相关文章

Unreal PythonScriptPlugin

Unreal PythonScriptPlugin 文章目录 Unreal PythonScriptPluginPython vs UnLua官方文档PyStubDoString 示例代码&#xff0c;引擎里有很多插件已经用 py 写编辑器脚本了 unreal.get_editor_subsystem(unreal.LevelEditorSubsystem).load_level("/Game/maps/UVlayoutTes…

ardupilot开发 --- gdb 篇

环境 win11 vscode 1.81.0 wsl2 ardupilot 利用gdb工具在vsCode中实现 Ardupilot SITL的断点调试 优点&#xff1a;可在vsCode中实现断点调试。 参考文献&#xff1a;https://ardupilot.org/dev/docs/debugging-with-gdb-using-vscode.html 安装gdb工具 打开wsl&#xff0…

剑指JUC原理-13.线程池

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&…

从NetSuite Payment Link杂谈财务自动化、数字化转型

最近在进行信息化的理论学习&#xff0c;让我有机会跳开软件功能&#xff0c;用更加宏大的视野&#xff0c;来审视我们在哪里&#xff0c;我们要到哪去。 在过去20多年&#xff0c;我们的财务软件经历了电算化、网络化、目前处于自动化、智能化阶段。从NetSuite这几年的功能发…

【Effective Modern C++】条款2:理解auto类型推导

条款2&#xff1a;理解auto类型推导 条款1中&#xff0c;模板类型推导的函数模板形如&#xff1a; template<typename T> void f(ParamType param);当变量采用auto声明时&#xff0c;auto扮演了模板中的T这个角色&#xff0c;而变量的类型扮演的是ParamType的角色。 条…

Django实战项目-学习任务系统-查询列表分页显示

接着上期代码框架&#xff0c;6个主要功能基本实现&#xff0c;剩下的就是细节点的完善优化了。 接着优化查询列表分页显示功能&#xff0c;有很多菜单功能都有查询列表显示页面情况&#xff0c;如果数据量多&#xff0c;不分页显示的话&#xff0c;页面展示效果就不太好。 本…

jQuery进阶

十三. jq书写代码的3种位置 """js中等待页面加载完毕""" # 等待页面加载完毕再执行代码 window.onload function(){// js代码 }"""jQuery中等待页面加载完毕""" # 第一种 $(document).ready(function(){// js代…

Spring AOP 简介

一、Spring AOP AOP 是一种思想&#xff0c;而 Spring AOP 是一个框架&#xff0c;提供了一种对 AOP 思想的实现。 1、什么是 AOP&#xff1f; AOP&#xff08;Aspect Oriented Programming&#xff09;&#xff1a;是一种编程思想&#xff0c;表示面向切面编程。指的是对某…

小程序video标签在底部出现1px无法去除的黑色线

问题描述 参见社区问题详情 此问题只会在ios手机真机中出现&#xff0c;视频底部出现1px无法去除的黑色线 解决方法 1.尝试过video各种配置&#xff0c;以为是设置参数导致 2.尝试过父元素设置height&#xff1a;200px&#xff1b;overflow&#xff1a;hidden&#xff1b;vi…

python栈_简单算术表达式_加减乘除

# 从左到右遍历中缀表达式中的每个数字和符号&#xff0c;若是数字就输出&#xff0c;即成为后缀表达式的一部分&#xff1b;若是符号则要分为两种情况&#xff1a; # (1)是括号时&#xff0c;如果是左括号&#xff0c;直接将左括号入栈&#xff0c;如果是右括号则栈顶元素依次…

插件_日期_lunar-calendar公历农历转换

现在存在某需求&#xff0c;需要将公历、农历日期进行相互转换&#xff0c;在此借助lunar-calendar插件完成。 下载 [1] 通过npm安装 npm install lunar-calendar[2]通过文件方式引入 <script type"text/javascript" src"lib/LunarCalendar.min.js">…

2.3 矩阵消元

一、消元矩阵 消元矩阵执行消元步骤用到的矩阵。从第 i i i 个方程减去 l i j l_{ij} lij​ 乘第 j j j 个方程&#xff08;将 x j x_j xj​ 从第 i i i 行中消去&#xff09;。我们需要很多个简单的矩阵 E i j E_{ij} Eij​&#xff0c;每一个对应一个主对角线下方要消…

React 项目结构小结

React 项目结构小结 简单的记录一下目前 React 项目用的依赖和实现 摸索了大半年了大概构建一套用起来还算轻松的体系……&#xff1f;基本上应该是说可以应对大部分的项目了 使用的依赖 目前项目还在 refactoring 的阶段&#xff0c;所以乱得很&#xff0c;这里是新建一个…

有什么好用的CRM客户管理系统?推荐这5大高口碑的CRM系统!

有什么好用的CRM客户管理系统&#xff1f;推荐这5大高口碑的CRM系统&#xff01; 好用的CRM客户管理系统&#xff1a; ①需要进行精细化管理 ②需要专业的管理工具 ③最好能够做到和erp系统和oa系统的集成 授人以鱼不如授人以渔&#xff0c;在给题主推荐crm系统之前&#…

MySQL 是否大小写敏感

本文未做特别说明的&#xff0c;指同时适用于 MySQL 5.7 和 MySQL 8.x。 先说结论&#xff1a; 数据库、表名&#xff08;包括别名&#xff09;、触发器名是否大小写敏感与操作系统以及 MySQL 配置有关。列名&#xff08;包括别名&#xff09;、索引、存储过程和事件名称大小写…

高数笔记06:无穷级数

图源&#xff1a;文心一言 时间比较紧张&#xff0c;仅导图~~&#x1f95d;&#x1f95d; 第1版&#xff1a;查资料、画导图~&#x1f9e9;&#x1f9e9; 参考资料&#xff1a;《高等数学 基础篇》武忠祥 &#x1f433;目录 &#x1f433;常数项级数 &#x1f40b;概要 &…

C++基础——对于C语言缺点的补充(2)

上篇文章中说到&#xff0c;为了解决C语言会出现人为定义的函数和库函数出现重定义的错误&#xff0c;C引入了一个新的概念&#xff0c;即命名空间&#xff0c;通过认为定义命名空间&#xff0c;来解决上述问题。 在本篇文章中&#xff0c;将继续介绍C相对于C语言不足来进行的补…

Node.js、Chrome V8 引擎、非阻塞式I/O介绍

目录 Node.js介绍Chrome V8 引擎介绍非阻塞式I/O介绍 &#x1f44d; 点赞&#xff0c;你的认可是我创作的动力&#xff01; ⭐️ 收藏&#xff0c;你的青睐是我努力的方向&#xff01; ✏️ 评论&#xff0c;你的意见是我进步的财富&#xff01; Node.js介绍 Node.js 是一个…

Harbor企业级Registry基础镜像仓库的详细安装使用教程(保姆级)

Harbor Docker 官方提供的私有仓库 registry&#xff0c;用起来虽然简单 &#xff0c;但在管理的功能上存在不足。 Harbor是vmware一个用于存储和分发Docker镜像的企业级Registry服务器&#xff0c;harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。 ha…

数据结构之堆的实现(图解➕源代码)

一、堆的定义 首先明确堆是一种特殊的完全二叉树&#xff0c;分为大根堆和小根堆&#xff0c;接下来我们就分别介绍一下这两种不同的堆。 1.1 大根堆&#xff08;简称&#xff1a;大堆&#xff09; 在大堆里面&#xff1a;父节点的值 ≥ 孩子节点的值 我们的兄弟节点没有限制&…