动态规划之矩阵的最小路径和

2023-10-27

题目: 给定一个m*n的矩阵,从左上角开始,每次只能向下或向右走,最后到达右下角的位置,路径上所有数字加起来就是路径的和,返回所有路径中最小的路径和

举例:

给定以下矩阵

1   3    5    9

8   1    3    4

5   0    6    1

8   8    4    0

路径 1--3---1--0--6---1---0是最小路径,最小路径和是12,那么怎么用动态规划来实现呢?

分析:

我们用二维数组a[m][n]来存储矩阵,到达a[i][j]的最短路径和用dp[i][j]来存储

a[0][i] 和a[j][0]的值我们可以很容易就算出来,因为到达这些节点只有一条路线

dp[0][0]=a[0][0],

dp[0][1]=dp[0][0]+a[0][1],

dp[0][2]=dp[0][1]+a[0][2]

以此类推,dp[0][i]=dp[0][i-1],i>1

同理得出dp[j][1]=dp[j-1][0],j>1

由此,现在的dp数组的值为

1      4        9       18

9

14

22

以此为基础,继续计算dp[1][1]=min(dp[1][0],dp[0],[1])+a[1][1],到达a[i][j](i>=1,j>=1)路径都有两条,取其中路径和最小的一条,得出dp[i][j]=min(dp[i-1],[j],dp[i],[j-1])+a[i][j]

解决该问题需要三个for循环

代码如下:

public class MinPathSum {
    public static void main(String[] args) {
        int a[][]={{1,3,5,9},
                    {8,1,3,4},
                    {5,0,6,1},
                    {8,8,4,0}};
        System.out.println(getMinPathSum(a));
    }
    private static int getMinPathSum(int [][]a){
        int[][] dp=new int[a.length][a[0].length];
        dp[0][0]=a[0][0];
        // 得出第一行的路径和
        for(int i=1;i<a[0].length;i++){
            dp[0][i]=dp[0][i-1]+a[0][i];
        }
        //得出第一列的路径和
        for(int j=1;j<a.length;j++){
            dp[j][0]=dp[j-1][0]+a[j][0];
        }
        //得出dp[i][j],i>=1,j>=1
        for(int i=1;i<dp.length;i++) {
            for (int j = 1; j < dp[0].length; j++) {
                dp[i][j]=getMin(dp[i-1][j],dp[i][j-1])+a[i][j];
            }

        }
        // 输出转换后的dp数组
        for(int i=0;i<dp.length;i++) {
            for (int j = 0; j < dp[0].length; j++) {
                System.out.print(dp[i][j]+" ");
            }
            System.out.println();
        }
        return dp[dp.length-1][dp[0].length-1];
    }
    private static int getMin(int a,int b){
        return a<b?a:b;
    }

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动态规划之矩阵的最小路径和 的相关文章

  • Electron 自定义顶部菜单和上下文菜单

    自定义顶部菜单 文章目录 自定义顶部菜单 1 主进程 2 渲染进程定义顶部菜单 3 实现效果 4 渲染进程定义上下文菜单 5 实现效果 1 主进程 main js 代码如下 示例 main js const electron require
  • 实时分割算法常用思想

    目录 1 替换主网络 2 减少通道数 3 减少卷积层 4 将卷积层替换为组卷积层或其他能减少计算量的卷积操作 5 增加前期数据处理 6 减少复杂的融合方式 7 避免使用全连接 1 替换主网络 将参数量较大的网络替换为参数量小的网络 如 Re
  • qt中new与delete的使用

    qt中有时候使用new后并没有使用delete 原因是 Qt 自动回收是靠父子关系 父亲销毁了 他的孩子也销毁 include mainwindow h include

随机推荐

  • 【Transformer系列(2)】注意力机制、自注意力机制、多头注意力机制、通道注意力机制、空间注意力机制超详细讲解

    前言 注意力机制一直是一个比较热的话题 其实在很早之前就提出了 我们在学习图像分类时在SENet就见到过 直通车 经典神经网络论文超详细解读 七 SENet 注意力机制 学习笔记 翻译 精读 代码复现 自从谷歌发表了 Attention I
  • css 实现汉堡包式菜单

    title css 实现汉堡包式菜单 tags css time 2018 12 01 CSS3 实现汉堡包式菜单 html div class container div
  • 网络安全的规划

    防火墙被应用于内部网与外部网的连接之间 通过2 6 块 100M 快速以太网 卡直接连在 交换机上 使用虚拟网 VLAN 技术 来自 INTERNET 对内部网 12 的访问首先要经过防火墙 防火墙对进出内部网的数据内容进行各个层次的安全
  • C++指向类成员(数据、函数)的指针

    指向 类 的成员的指针包含两种 指向 类 的数据成员的指针 指向 类 的成员函数的指针 注意 指向的是 类的成员 和类发生关系 指向非静态公有数据成员的指针 在定义时必须和类相关联 在使用时必须和对象相关联 1 指向类的数据成员的指针 1
  • BestCoder Round #36 HDU(5198 - 5201)

    人生第一次ak了bc 当然要写个题解装逼一下 其实是题水 Hdu 5198 Strang Class 水题 不过wa了两发 include
  • 【2023版】Nmap的概述、安装并进行网络扫描实战

    Nmap概述 Nmap Network Mapper 网络映射器 是一个网络连接端扫描软件 用来扫描网上电脑开放的网络连接端 确定哪些服务运行在哪些连接端 并且推断计算机运行哪个操作系统 这是亦称 fingerprinting 它是网络管理
  • KMP算法详解

    一 什么是KMP算法 KMP主要应用在字符串匹配上 KMP的主要思想是当出现字符串不匹配时 通过已知一部分之前已经匹配的内容 避免从头再去做匹配 所以KMP算法的重点就是如何记录已经匹配的信息 也就是next 数组的实现 二 什么是next
  • linux系统中I2C总线匹配过程详解、initcall机制

    转载自 https www cnblogs com downey blog p 10493216 html i2c总线的初始化 分析i2c框架自然是从i2c总线的初始化开始 一切内核中i2c的相关操作都将建立在i2c总线的基础上 在实际驱动
  • Eclipse

    干活就这么点 1 class path resource application xml cannot be opened because it does not exist 2 把application xml放到classes下 这样才
  • ChatGPT+Word的智能化文字生成和应用

    在Word中引入OpenAI代码需要使用VBA编辑器 以下是在Word中引入OpenAI代码的步骤 打开Word文档 按下Alt F11键打开VBA编辑器 在VBA编辑器中 选择 插入 菜单 然后选择 模块 在新建的模块中 将OpenAI代
  • CSP第二轮比赛注意事项

    一 在哪里写代码 主办方 杭师大考点 已在 E 盘根目录下建立以考生准考证编号命名的文件夹 考生应检查该文件夹名称是否正确 包括编号及大小写字母 如有错误须立即上报监考人员 由监考人员进行更改 确认无误后 考生须为每道试题再单独建立一个子文
  • java怎样解决线程安全问题_如何解决线程安全问题

    一 什么时候会出现线程安全问题 在单线程中不会出现线程安全问题 而在多线程编程中 有可能会出现同时访问同一个资源的情况 这种资源可以是各种类型的的资源 一个变量 一个对象 一个文件 一个数据库表等 而当多个线程同时访问同一个资源的时候 就会
  • 广度优先遍历

    广度优先搜索遍历类似于树的按层次遍历 对于无向连通图 广度优先搜索是从图的某个顶点v0出发 在访问v0之后 依次搜索访问v0的各个未被访问过的邻接点w1 w2 然后顺序搜索访问w1的各未被访问过的邻接点 w2的各未被访问过的邻接点 即从v0
  • @Transactional导致 dynamic-datasource-spring-boot-starter失效原因分析

    环境 controller gt Aservice gt Bservice gt Bdao A表示A数据源 B表示B数据源 Aservcie使用Transactional注解 1 dynamic datasource DB切面是可以将数据源
  • torrent文件与百度云盘种子

    https jingyan baidu com article ce43664936850b3772afd34b html
  • 思科模拟器网络基础配置

    路由器的基本配置 Router config hostname R01 配置进入特权模式的密码 R01 config enable secret Bs0023 三层交换机开启路由功能 SW1 config if no sw 配置远程登陆 配
  • 反编译jar包,修改后重新编译为jar包

    使用开源jar包或者供应商jar包时 会发现一些bug或者已有功能无法满足我们要求 需要对jar中的 class文件进行修改 处理步骤如下所示 1 使用反编译工具将jar包反编译为源文件 反编译工具请参考XJAD2 2版下载地址 http
  • 移动端兼容及适配问题汇总

    适配问题1 问题1 移动端的vue页面 在IOS的设备上 点击下拉框 或者屏幕的话 屏幕会自动放大的问题 这个问题可能是由于 iOS 中的默认缩放选项导致的 iOS 会根据网页的大小来自动调整缩放级别 以便适应设备的屏幕 这个功能可以让网页
  • 模糊聚类的matlab仿真

    1 问题描述 模糊聚类分析是一种采用模糊数学语言对事物按一定的要求进行描述和分类的数学方法 1 模糊聚类分析一般是指根据研究对象本身的属性来构造模糊矩阵 并在此基础上根据一定的隶属度来确定聚类关系 即用模糊数学的方法把样本之间的模糊关系定量
  • 动态规划之矩阵的最小路径和

    题目 给定一个m n的矩阵 从左上角开始 每次只能向下或向右走 最后到达右下角的位置 路径上所有数字加起来就是路径的和 返回所有路径中最小的路径和 举例 给定以下矩阵 1 3 5 9 8 1 3 4 5 0 6 1 8 8 4 0 路径 1