下降路径最⼩和(medium)

题目描述:

给你一个 n x n 的方形 整数数组 matrix ,请你找出并返回通过 matrix 的下降路径 的最小和 。

下降路径 可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列(即位于正下方或者沿对角线向左或者向右的第一个元素)。具体来说,位置 (row, col) 的下一个元素应当是 (row + 1, col - 1)、(row + 1, col) 或者 (row + 1, col + 1) 。

示例 1:

复制代码
输入:matrix = [[2,1,3],[6,5,4],[7,8,9]]
输出:13
解释:如图所示,为和最小的两条下降路径

示例 2:

复制代码
输入:matrix = [[-19,57],[-40,-5]]
输出:-59
解释:如图所示,为和最小的下降路径

提示:

  • n == matrix.length == matrix[i].length
  • 1 <= n <= 100
  • -100 <= matrix[i][j] <= 100

题目解析:我们来简单理解一下题意,给你一个二维整数数组,请你找出并返回通过这个整数数组的下降路径的最小和。什么意思呢?从这个二维矩阵的任意一点作为起点,开始向下走,直到走到最后一行。分析示例1,可以从1位置出发,走到5位置,最后沿着左斜对角位置走到7位置,也可以从1位置出发,沿着右斜对角线走到4位置,在沿着左斜对角线走到8位置,返回它们的最小值。

算法解析:

状态表示:(经验+题目要求)经验:以某一个位置为结尾,dp[i][j]表示:到达[i,j]位置时最小的下降路径。

状态转移方程:(根据最近一步划分问题)分情况讨论:1.从[i-1,j-1]到[i,j]位置-->dp[i-1][j-chu1]+m[i][j];2.从[i-1,j]到[i,j]位置-->dp[i-1][j]+m[i][j];3.从[i-1,j+1]到[i,j]-->dp[i-1,j+1]+m[i][j];综上所述,dp[i][j]-min(x,y,z)+m[i][j](x,y,z分别代表上述在不同情况下推导出来的状态转移方程);

初始化:(处理越界访问情况)策略:多加一行多加两列。(注意:里面的值要保证后面的填表时正确的;下标的映射)。

填表顺序:从上往下

返回值:最后一行dp表里面的最小值。

代码:

cpp 复制代码
class Solution {
	int jiuephferui(vector<vector<int>>& num) {
		int n = num.size();
		vector<vector<int>> dp(n + 1, vector<int>(n + 2,INT_MAX));
		for (int j = 0; j < n + 2; ++j) {
			dp[0][j] = 0;
		}
		
		for (int i = 1; i <= n; ++i) {
			for (int j = 1; j <= n; ++j) {
				dp[i][j] = min(dp[i - 1][j - 1], min(dp[i - 1][j], dp[i - 1][j - 1])) + num[i - 1][j - 1];
			}
			
		} 
		int ret = INT_MAX;
		for (int j = 1; j <= n; ++j) ret = min(ret, dp[n][j]);
		return ret;
	}
};
相关推荐
草莓熊Lotso2 小时前
【C++ 基于微服务的即时通讯系统】etcd + brpc 从安装到服务注册发现全链路实战
网络·数据库·c++·redis·微服务·etcd
inrichtt7 小时前
第八课时:SPI总线揭秘:四线全双工通信的奥
c语言·数据结构·stm32·单片机·嵌入式硬件
HPtiger8 小时前
数据结构——选择排序
数据结构·算法·排序算法
康实训8 小时前
老年评估仿真实训平台架构设计与老年人能力评估实训室教学落地实践
大数据·人工智能·算法·实训室·实训室建设
DongQiShanRen8 小时前
六根硬件映射(四):归属澄清、两处不一致与卷十一总表
开发语言·人工智能·算法·rust·哈希算法·集成学习
CCblandy8 小时前
雪花 ID 四个边界实测:时钟回拨重号 500 个,前端 JSON.parse 直接丢精度
后端·python·算法·性能优化·架构
丑梨数据8 小时前
信创环境里跑文档工具:格式兼容与本地合规的几个坑
数据结构·人工智能·算法·决策树·排序算法
烂蜻蜓9 小时前
Pandas入门教程(四):Series数据结构——创建、索引与常用方法
数据结构·pandas
把我格子衫拿来9 小时前
VTK 9.5 与 Qt 6 联合开发:从嵌入三维窗口到可维护的桌面架构
c++·python·qt·vtk·三维可视化
无忧.芙桃9 小时前
C++语言原理与实践(十六):多态机制讲解
开发语言·c++·多态