7-10 求解矩阵最小路径和问题 (12 分)

2023-11-04

给定一个m行n列的矩阵,从左上角开始每次只能向右或者向下移动,最后到达右下角的位置,路径上的所有数字累加起来作为这条路径的路径和。求所有路径和中最小路径和。

输入格式:
首先输入行数m及列数n,接下来输入m行,每行n个数。

输出格式:
输出第一行为最小路径(假定测试数据中的最小路径唯一),第2行为最小路径和。

输入样例1:

4 4
1 3 5 9
8 1 3 4
5 0 6 1
8 8 4 0

结尾无空行
输出样例1:

1 3 1 0 6 1 0 
12

知识点:

  • 动态规划

思路:

  • 大部分求最小(最大)路径和都可以用动态规划进行求解, 用数组dp[][]来存储路径和,
  • 因为只能向右和向下进行移动,所以第一行只能是通过向右移动得到的,第一列只能是上一行通过向下得到的(1,1除外)
  • 其余情况要取min(dp[i-1][j],dp[i][j-1])的最小值然后加上当前值即dp[i][j]=min(dp[i-1][j],dp[i][j-1])+a[i][j]
  • 求路径:
  • 从dp数组进行确定路径,因为路径中肯定会包括右下角和左上角,其他值是通过下移或者是右移得到的所以要对其进行判断取最小值,然后将其下标变为最小值的下标然后以此类推知道推到(1,1)结束循环(这里也要对第一行第一列进行处理)

注意事项:

  • 要考虑到第一行第一例,还有左上角和右下角,然后求路径,要想到路径的获取是从dp中确定的,因为dp中数据不是从有移就是从下移得到的,并且在这里也要考虑到第一行第一列的问题。

源码:

#include<bits/stdc++.h>
using namespace std;
int m, n;
int ans;
int u;
int a[1005][1005];
int dp[1005][1005];
int pre[1005][1005];
void dpsort() {
	for (int i = 1;i <= m;i++) {
		for (int j = 1;j <= n;j++) {
			if (i == 1 && j == 1) {
				dp[i][j] = a[i][j];
				pre[i][j] = j;
				continue;
			}	
			if (j == 1) {
				dp[i][j] = dp[i - 1][j] + a[i][j];
				pre[i][j] = j;
			}
				
			else if (i == 1)
				dp[i][j] = dp[i][j - 1] + a[i][j];
			else
				dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + a[i][j];
		}
	}
}
void path() {
	stack<int> st;
	st.push(a[m][n]);
	int i = m;
	int j = n;
	while (i != 1 || j != 1) {
		if (i == 1) {
			st.push(a[i][j - 1]);
			j = j - 1;
		}
		else if (j == 1) {
			st.push(a[i - 1][j]); 
			i = i - 1;
		}			
		else if (dp[i][j - 1] < dp[i - 1][j]) {
			st.push(a[i][j - 1]);
			j = j - 1;
		}
		else {
			st.push(a[i - 1][j]);
			i = i - 1;
		}
	}
	while (!st.empty()) {
		int t = st.top();
		st.pop();
		printf("%d ", t);
	}
	cout << endl;
}
int main() {

	cin >> m >> n;
	for (int i = 1;i <= m;i++) {
		for (int j = 1;j <= n;j++) {
			cin >> a[i][j];
		}
	}
	dpsort();
	path();
	cout << dp[m][n];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

7-10 求解矩阵最小路径和问题 (12 分) 的相关文章

  • 如何检查图像对象与资源中的图像对象是否相同?

    所以我试图创建一个简单的程序 只需在单击图片框中更改图片即可 我目前只使用两张图片 所以我的图片框单击事件函数的代码 看起来像这样 private void pictureBox1 Click object sender EventArgs
  • 访问私人成员[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 通过将类的私有成员转换为 void 指针 然后转换为结构来访问类的私有成员是否合适 我认为我无权修改包含我需要访问的数据成员的类 如果不道德 我
  • 是否可以强制 XMLWriter 将元素写入单引号中?

    这是我的代码 var ptFirstName tboxFirstName Text writer WriteAttributeString first ptFirstName 请注意 即使我使用 ptFirstName 也会以双引号结束 p
  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • 当我使用“control-c”关闭发送对等方的套接字时,为什么接收对等方的套接字不断接收“”

    我是套接字编程的新手 我知道使用 control c 关闭套接字是一个坏习惯 但是为什么在我使用 control c 关闭发送进程后 接收方上的套接字不断接收 在 control c 退出进程后 发送方的套接字不应该关闭吗 谢谢 我知道使用
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • 如何将图像和 POST 数据上传到 Azure 移动服务 ApiController 终结点?

    我正在尝试上传图片and POST表单数据 尽管理想情况下我希望它是json 到我的端点Azure 移动服务应用 我有ApiController method HttpPost Route api upload databaseId sea
  • Web API - 访问 DbContext 类中的 HttpContext

    在我的 C Web API 应用程序中 我添加了CreatedDate and CreatedBy所有表中的列 现在 每当在任何表中添加新记录时 我想填充这些列 为此目的我已经覆盖SaveChanges and SaveChangesAsy
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • 从路径中获取文件夹名称

    我有一些路c server folderName1 another name something another folder 我如何从那里提取最后一个文件夹名称 我尝试了几件事 但没有成功 我只是不想寻找最后的 然后就去休息了 Thank
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?

    我在之前的回答里发现了问题 https stackoverflow com q 19325258 159684一种无需注册即可调用 C xll 中定义的函数的方法 我之前使用 XLW 提供的注册基础结构 并且使用 XlfOper 类型在 V
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • ASP.NET MVC 6 (ASP.NET 5) 中的 Application_PreSendRequestHeaders 和 Application_BeginRequest

    如何在 ASP NET 5 MVC6 中使用这些方法 在 MVC5 中 我在 Global asax 中使用了它 现在呢 也许是入门班 protected void Application PreSendRequestHeaders obj
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问

随机推荐

  • NotImplementedError: Could not run ‘torchvision::nms‘ with arguments from the ‘CUDA‘ backend解决办法

    NotImplementedError Could not run torchvision nms with arguments from the CUDA backend This could be because the operato
  • [项目管理-22]:项目中开环、闭环、安全、监控四种沟通模型:UDP/TCP/SCTP/PID模型

    目录 前言 第1章 项目中闭环沟通模型 1 1 沟通模型 1 2 开环沟通 1 3 闭环沟通 1 4 闭环监控式沟通 第2章 TCP UDP SCTP通信模型在项目管理中的应用 2 1 UDP模式沟通 2 2 TCP模式沟通 2 3 SCT
  • GB28181智慧可视化指挥控制系统之执法记录仪设计探讨

    什么是智慧可视化指挥控制系统 智慧可视化指挥控制平台通过4G 5G网络 WIFI实时传输视音频数据至指挥中心 特别是在有突发情况时 可以指定一台执法仪为现场视频监控器 实时传输当前画面到指挥中心 指挥中心工作人员可通过麦克风向现场执法人员下
  • golang高精度十进制数扩展包decimal用法

    在Go语言中 没有内置的十进制数 decimal 类型或相关的标准库 然而 有一些第三方包可用于处理十进制数 其中比较常用的是decimal包 decimal包提供了一个big Float的子类型decimal Decimal 可以用于表示
  • 快捷指令url大全

    支付宝付款码 alipay platformapi startapp appId 20000056 支付宝健康码 alipays platformapi startapp appId 20000067 chInfo ch desktop u
  • 两个有序链表的合并(超详细)

    不知道大家有没有做过一道经典的题目 两个长度为15的有序链表的合并 大家先看题目 那么这道题该如何做尼 首先我们用比较笨的办法 用链表做 首先我们创建两个链表 那么该如何将两个链表合并尼 只需要创建两个指针 指向两个链表 然后比较两个链表中
  • Git的一些命令行

    1 创建一个分支git branch 分支名字 2 提交git commit 3 换主支git checkout 要换到的名字那儿 4合并git merge 分支名字 合并到当前那个支上 且那个支会指向两个父节点 5 git rebase取
  • 南溪的远程桌面软件使用笔记

    1 介绍 远程桌面软件可以让我们远程操作另一个主机的用户界面 Note TeamViewer付费一次后 就会强制自动续费一年 如果取消订阅需要提前续订日期前至少28天 28天的提前期实在太长了 TeamViewer这个公司十分黑心 以后注意
  • TensorFlow 2.0深度强化学习指南

    在本教程中 我将通过实施Advantage Actor Critic 演员 评论家 A2C 代理来解决经典的CartPole v0环境 通过深度强化学习 DRL 展示即将推出的TensorFlow2 0特性 虽然我们的目标是展示Tensor
  • 单链表的基本设计及实际操作

    单链表的基本设计 C语言代码实现 1 单链表概念 设计 单链表是一种链式存取的数据结构 链表中的数据是以结点来表示的 每个结点的构成 元素 数据元素的映象 指针 指示后继元素存储位置 元素就是存储数据的存储单元 指针就是连接每个结点的地址数
  • 如何安装Apache服务

    目录 什么是Apache 第一步 关闭防火墙和安全机制 第二步 系 统 上 定 义 SELinux 最 高 级 别 第三步 导入对应的依赖包并解包 第四步 安装依赖环境 第五步 移动相关文件 第六步 编译安装 第七步 编译 第八步 备份配置
  • git 提交代码到错误分支如何解决

    IDEA 中 当我们修改代码提交后 才发现提交到了错误的分支上 这时如何处理 切换到正确的分支 在刚刚的错误提交上 右键 gt 点击 cherry pick 择优选择 push 推送代码到仓库 注 cherry pick 时 可能提示 yo
  • vue实现移动端适配方案

    vue实现移动端适配步骤如下 先安装amfe flexible和postcss pxtorem npm install amfe flexible save npm install postcss pxtorem save 在main js
  • C++ const 修饰函数

    const int fun int a 修饰返回值 int fun const int a 修饰形参 int fun int a const const成员函数 const修饰返回值 多是修饰返回值是引用类型的情况下 为了避免返回值被修改的
  • 前端基础汇总-html、css

    文章目录 1 HTML5新特性 2 HTML5语义化 3 CSS盒子模型 W3C盒子模型 标准盒模型 IE盒子模型 怪异盒模型 盒子塌陷 盒子塌陷解决方法 4 样式优先级 选择器类型 权重计算规则 比较规则 5 CSS继承 6 css 伪类
  • 剑指Offer数组专题

    剑指 Offer II 002 二进制加法 二进制 字符串转整型 给定两个 01 字符串 a 和 b 请计算它们的和 并以二进制字符串的形式输出 输入为 非空 字符串且只包含数字 1 和 0 示例 1 输入 a 11 b 10 输出 101
  • Python+Selenium自动化测试(六):测试驱动TDD

    文章目录 一 为什么要使用ddt模块 二 ddt模块 三 CSV文件处理 四 xlsx文件处理 一 为什么要使用ddt模块 测试驱动开发模式 要求开发在写业务代码的时候 先写出测试代码 同时单元测试例子决定了如何来写产品的代码 并且不断的成
  • spring mvc 2.5.6配置

    兼容公司老版本项目 必须得用spring mvc2 5 6 那么问题来了 怎么配置controller都抛出no mapping的错误 经过查文档得出以下配置 仅供参考 servlet config xml
  • 让特定软件使用独显/集显的解决方法

    今天下载OBS Studio 一款直播 录制软件 但是配置显示器捕获 输出黑屏 原因是软件需要在集显环境下运行 然而日常写图形学的弱鸡还得用独显赶ddl呢 所以我们可以给特定软件配置默认显卡 设置 gt 显示 gt 图形设置 gt 浏览 g
  • 7-10 求解矩阵最小路径和问题 (12 分)

    给定一个m行n列的矩阵 从左上角开始每次只能向右或者向下移动 最后到达右下角的位置 路径上的所有数字累加起来作为这条路径的路径和 求所有路径和中最小路径和 输入格式 首先输入行数m及列数n 接下来输入m行 每行n个数 输出格式 输出第一行为