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

news2024/11/24 9:39:00

[动态规划] (九) 路径问题: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.coloradmin.cn/o/1178465.html

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

相关文章

Poetry:Python开发者的依赖管理新时代

更多资料获取 &#x1f4da; 个人网站&#xff1a;涛哥聊Python 在Python开发中&#xff0c;管理项目的依赖关系是一个至关重要的任务。传统上&#xff0c;开发者使用requirements.txt文件和pip工具来管理依赖&#xff0c;但这种方式在复杂项目中存在一些问题。Poetry是一个现…

Docker 学习路线 5:在 Docker 中实现数据持久化

Docker 可以运行隔离的容器&#xff0c;包括应用程序和其依赖项&#xff0c;与主机操作系统分离。默认情况下&#xff0c;容器是临时的&#xff0c;这意味着容器中存储的任何数据在终止后都将丢失。为了解决这个问题并在容器生命周期内保留数据&#xff0c;Docker 提供了各种数…

kafka问题汇总

报错1&#xff1a; 解决方式 1、停止docker服务   输入如下命令停止docker服务 systemctl stop docker 或者service docker stop1   停止成功的话&#xff0c;再输入docker ps 就会提示出下边的话&#xff1a; Cannot connect to the Docker daemon. Is the docker daem…

通过全流量查看部门或客户端网络使用情况

近年来&#xff0c;随着数字化转型和云计算服务的广泛应用&#xff0c;组织和企业对于网络带宽和性能的需求也在不断增长。 网络的稳定性、性能和安全性对于业务流程的顺畅运行至关重要。因此&#xff0c;了解部门或客户端网络的使用情况是网络管理和优化的关键。本文将通过Ne…

【C++】STL容器适配器——stack类的使用指南(含代码使用)(17)

前言 大家好吖&#xff0c;欢迎来到 YY 滴C系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 目录 一、stack 类——基本介绍二、stack 类…

if语句中的按位取反问题

&#x1f380; 文章作者&#xff1a;二土电子 &#x1f338; 关注公众号获取更多资源&#xff01; &#x1f438; 期待大家一起学习交流&#xff01; 文章目录 一、现象描述1.1 在C语言中&#xff08;非STM32&#xff09;1.2 STM32中运行 二、基础知识复习2.1 原码、反码和补…

dell r720部署chatglm3,使用nvidia tesla P40+M40

dell r720的idrac的地址默认是192.168.1.110&#xff0c;root 默认密码calvin fatal Error! All channnels have been disabled due to all DIMMs failed the Memoey 是什么意思 Dell PowerEdge T320服务器 开机显示 Fatal Errort!all channells have been disabled due to …

NSSCTF第11页(1)

[HUBUCTF 2022 新生赛]Calculate 进到主页 翻译 回答以下数学问题20次&#xff1b;你有3秒钟的时间来解决每个问题&#xff1b; 为了保护服务器&#xff0c;你不能在1秒内回答一个问题 您已回答0个问题&#xff1b; 让我们3秒速算&#xff0c;没那个实力&#xff0c;提示说是写…

Kotlin基础数据类型和运算符

原文链接 Kotlin Types and Operators Kotlin是新一代的基于JVM的静态多范式编程语言&#xff0c;功能强大&#xff0c;语法简洁&#xff0c;前面已经做过Kotlin的基本的介绍&#xff0c;今天就来深入的学习一下它的数据类型和运算操作符。 数据类型 与大部分语言不同的是&am…

Vue多级路由的实现

对Vue路由的配置不了解的看这篇文章&#xff1a;Vue-router 路由的基本使用-CSDN博客 一、配置children属性 注意&#xff1a;子路径不能带 / { path : "/父路径", component : 父组件, children : [{ path : "子路径", component : 子组件 }] } 二、配…

读源码的七大步骤

前序 在如今信息这么发达的时代&#xff0c;如何让自己成长得最快&#xff0c;莫过于直接去“学习”别人已经写好的产品。但一提到读源码&#xff0c;很多人都会比较畏惧&#xff0c;认为读源码是高手才会做的事情。毕竟动不动几十万行代码的源码&#xff0c;谁看了不害怕呢&a…

软件开发必备神器!一文读懂10款热门看板工具推荐!

看板&#xff08;Kanban&#xff09;是一种流行的框架&#xff0c;用于实施敏捷和DevOps软件开发。它要求实时沟通每个人的能力&#xff0c;并全面透明地展示正在进行的工作。工作项目在看板上以可视化方式表示&#xff0c;使项目经理和所有团队成员可以随时查看每个工作的状态…

云尘靶场 --铁三域控

签到1-eval ls System Assert 铁三域控 域就像是我们一个机房&#xff0c;老师的电脑控制很多很多电脑&#xff0c;这个机房就像一个域&#xff0c;老师是管理员身份&#xff0c;可以控制所有学生的电脑 下文的141就像老师&#xff0c;192.168.60.100就像学生的电脑 123 用…

Linux学习笔记之四(文件IO、目录IO)

Linux 1、文件IO1.1、open and close1.2、read and write1.3、lseek1.4、综合练习 2、目录IO2.1、mkdir2.2、opendir, closedir, readdir2.3、综合练习 1、文件IO 1.1、open and close 使用以下代码查看以下open函数原型&#xff1a; man 2 open如图&#xff0c;open函数有两…

测试开发角色定位

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

python opencv 实现对二值化后的某一像素值做修改和mask叠加

实现对二值化后的某一像素值做修改 使用OpenCV的findNonZero函数找到所有非零&#xff08;也就是像素值为255&#xff09;的像素&#xff0c;然后遍历这些像素并修改他们的值。示例代码&#xff1a; import cv2 import numpy as np # 加载并二值化图像 img cv2.imread(…

实验七 组合器模式的应用

实验目的 1)掌握组合器模式&#xff08;composite&#xff09;的特点 2 分析具体问题&#xff0c;使用组合器模式进行设计。 实验内容和要求 在例3.3的设计中&#xff0c;添加一个空军大队( Wing)类&#xff0c;该类与Squadron、Group类是平行的&#xff0c;因此应该继承了AirU…

【聚沙成塔系列】通信笔记知识汇总一

什么是NCO 载波NCO通过控制频率w控制。每次要累加的数字M就是频率控制字。调节M进而控制载波频率。 什么是带宽 3db带宽 常说的3dB带宽&#xff0c;是指在信号功率谱对称的情况下&#xff0c;功率谱密度比信号频谱中心处的峰值下降3dB的两个频率之间的频率范围 工作带宽 工作…

十年老程序员分享13个最常用的Python深度学习库和介绍,赶紧收藏码住!

文章目录 前言CaffeTheanoTensorFlowLasagneKerasmxnetsklearn-theanonolearnDIGITSBlocksdeepypylearn2Deeplearning4j关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案…

什么是本地存储的有效期?

前言 本地存储是一种在Web开发中常用的客户端存储数据的方式&#xff0c;它可以让网页应用程序在用户的浏览器中存储和检索数据&#xff0c;而无需依赖服务器来保存信息。本地存储的有效期是指数据存储在用户的设备上可以被访问和保留的时间段。在本地存储中&#xff0c;有两种…