下降路径最⼩和(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;
	}
};
相关推荐
2601_950760795 分钟前
TNF-α:自身免疫疾病治疗的核心靶点与信号通路解析
人工智能·算法·蛋白
呜喵王阿尔萨斯9 分钟前
C/C++ 杂记-1
c++
不会代码的小猴19 分钟前
2. 了解Qt
开发语言·c++·笔记·qt·算法
比奇堡裤头村21 分钟前
统计学习方法——支持向量机
算法·支持向量机·学习方法
兵哥工控33 分钟前
mfc实现在数值范围内实时改变静态文本控件字体颜色实例
c++·mfc
程序喵大人3 小时前
【C++进阶】STL算法与函数对象 - 09 函数对象保存状态并复用规则
开发语言·c++·算法·stl·函数对象
致Great7 小时前
DeepSeek Harness插件开发实战教程:我让它自己写了一个 arXiv 搜索插件
算法
ShineWinsu8 小时前
对于C++:auto_ptr、unique_ptr、shared_ptr的模拟实现
c++·面试·笔试·智能指针·unique_ptr·shared_ptr·auto_ptr
XLYcmy10 小时前
京东 算法实习一面 下+手撕
c++·python·llm·概率论·数据处理·训练·codebert
反转180度11 小时前
Qt 6 + C++17 实现 SFTP 批量部署:工业设备运维工具实战解析
运维·c++·qt