下降路径最⼩和(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;
	}
};
相关推荐
知识分享小能手4 小时前
C++ 学习教程,从入门到精通,C++对象和类 — 详细知识点总结(10)
开发语言·c++·学习
顺顺 尼5 小时前
linux 进程信号(上)
linux·c++·算法
罗西的思考5 小时前
[Agent Memory / 强化学习] MemPO源码学习笔记 ---(5)--- GRPO
人工智能·算法·机器学习
richard_yuu5 小时前
动态规划:强化学习的「数学基础」,从 MDP 到值迭代
深度学习·神经网络·算法·yolo·机器学习·动态规划
mmmmath_35 小时前
LeetCode.225.用队列实现栈
算法
Elaine3365 小时前
数据结构与算法-程序
数据结构·python·算法·计算机基础·编程基础
2601_965742225 小时前
布局GEO AI本地营销,我重点看这几个细节
大数据·人工智能·算法·ai·新媒体运营
EatFan5 小时前
AI Agent 上生产前先加三道闸门:审批、限权、可回放的工程实践
人工智能·python·算法·多智能体·ai agent·mcp·harness
思茂信息6 小时前
CST软件BCI仿真模型及仿真案例
开发语言·单片机·嵌入式硬件·算法·emc
海上小飞龙6 小时前
改一个数,右边全得重算,这题怎么扛住两万次查询
java·c++·python