当前位置:首页 > 力扣 > 力扣931题最小下降路径和解析 动态规划解法 LeetCode解题技巧

力扣931题最小下降路径和解析 动态规划解法 LeetCode解题技巧

9个月前 (06-19)

力扣931题最小下降路径和解析 动态规划解法 LeetCode解题技巧  最小下降路径和 动态规划 自底向上递推 第1张

一、题目解读

力扣931题「Minimum Falling Path Sum」(最小下降路径和)要求在一个n x n的整数矩阵中,计算从顶部到底部的最小路径和。路径只能从每个位置向下或对角线移动(即向下、左下、右下)。题目关键在于如何通过路径选择优化,找到全局最小值。

二、解题思路

采用动态规划(Dynamic Programming)自底向上递推的策略。核心思想是从矩阵倒数第二行开始,逐行计算每个位置的最小下降路径和。通过记录当前位置到末尾的最小路径和,避免重复计算,最终得到全局最优解。

三、解题步骤

1. 边界处理:判断矩阵是否为空,空矩阵直接返回0。

2. 递推计算:

    从倒数第二行(i = n-2)开始逆向遍历至第一行。

    对每行每个位置j,计算下一行相邻位置(j-1、j、j+1)中的最小值min_val。

    将min_val累加至当前位置:matrix[i][j] += min_val,更新当前路径和。

3. 结果获取:遍历第一行,返回其中的最小值。

四、代码与注释

#include <vector>
#include <algorithm>
using namespace std;

class Solution {
public:
    int minFallingPathSum(vector<vector<int>>& matrix) {
        int n = matrix.size();
        if (n == 0) return 0; // 空矩阵处理
        
        // 从倒数第二行开始向上递推
        for (int i = n - 2; i >= 0; --i) {
            for (int j = 0; j < n; ++j) {
                // 找出下一行相邻三个位置的最小值
                int min_val = matrix[i+1][j];
                if (j > 0) min_val = min(min_val, matrix[i+1][j-1]); // 左邻居
                if (j < n-1) min_val = min(min_val, matrix[i+1][j+1]); // 右邻居
                matrix[i][j] += min_val; // 累加至当前路径
            }
        }
        
        // 返回第一行中的最小值
        return *min_element(matrix[0].begin(), matrix[0].end());
    }
};

五、总结

该解法通过动态规划将O(n^3)的暴力枚举优化至O(n^2),空间复杂度仅为O(1)(原地修改矩阵)。关键在于利用“最优子结构”性质,自底向上递推避免了重复计算。对于类似需要路径优化的题目,动态规划是核心解题思路。


参考:C++算法

原创内容 转载请注明出处

分享给朋友:

相关文章

LeetCode 120题三角形最小路径和最优解法:动态规划详解与代码实现

LeetCode 120题三角形最小路径和最优解法:动态规划详解与代码实现

一、题目解读LeetCode 120题“三角形最小路径和”要求给定一个由数字组成的三角形,从顶部开始向下移动,每次可向左或向右移动一格,计算从顶至底的最小路径和。三角形以二维向量形式给出,每层元素数量...

洛谷P4551题解题报告:图论与Trie树优化异或路径问题的实战解析

洛谷P4551题解题报告:图论与Trie树优化异或路径问题的实战解析

一、题目解读洛谷P4551题要求在一个无向图中,寻找任意两点路径权值异或后的最大值。题目输入为图的边信息(点数n和n-1条边),每条边包含起点、终点及权值。需输出所有路径中权值异或的最大值。问题核心在...

1999年NOIP提高组导弹拦截(洛谷P1020)解题思路与动态规划代码解析

1999年NOIP提高组导弹拦截(洛谷P1020)解题思路与动态规划代码解析

一、题目解读    1999年NOIP提高组“导弹拦截”问题(对应洛谷P1020)要求设计导弹拦截系统:给定一组导弹高度数据,需计算最少拦截系统数量,并求最多能...

洛谷2789题解:直线交点数的递归求解与优化(附代码详解)

洛谷2789题解:直线交点数的递归求解与优化(附代码详解)

一、题目解读洛谷2789题要求计算n条直线在平面上两两相交时产生的不同交点数量。题目强调“不同”交点,需排除重复情况。解题关键在于如何高效枚举所有可能的交点组合,并避免重复计数。二、解题思路参考代码采...

牛客25461题解析:花园喷泉距离优化算法(动态规划+后缀数组解法)

牛客25461题解析:花园喷泉距离优化算法(动态规划+后缀数组解法)

一、题目解读牛客25461题要求计算一个花园中n朵花到两个喷泉的最小距离平方和。用户需输入喷泉坐标(x1,y1)和(x2,y2),以及n朵花的坐标(x,y),通过合理分配每朵花到两个喷泉的距离,使总距...

【GESP五级真题】挑战怪物(洛谷B4050)题解:质数筛法+动态规划优化,高效攻克魔法攻击策略

【GESP五级真题】挑战怪物(洛谷B4050)题解:质数筛法+动态规划优化,高效攻克魔法攻击策略

一、题目解读2024年GESP五级题“挑战怪物(洛谷B4050)”要求玩家计算击败怪物所需的最小攻击次数。怪物血量H可被分解为魔法攻击(消耗质数血量)与物理攻击(每次固定伤害)的组合。题目难点在于如何...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。