【学会动态规划】最小路径和(9)

简介: 【学会动态规划】最小路径和(9)

动态规划怎么学?

学习一个算法没有捷径,更何况是学习动态规划,

跟我一起刷动态规划算法题,一起学会动态规划!

1. 题目解析

题目链接:64. 最小路径和 - 力扣(Leetcode)

这道题目不难理解,就是从右上角开始,

只能往右或者往下走,计算走到右下角的最小路径和即可。

2. 算法原理

1. 状态表示

dp[ i ][ j ] 就表示从起点到 [ i,j ] 位置的最小路径和。

2. 状态转移方程

根据最近的一步划分问题,而到 [ i,j ] 位置有两种情况,

一个是从上面来:dp[ i - 1 ][ j ] + g[ i ][ j ]

一个是从左边来:dp[ i ][ j - 1 ] + g[ i ][ j ]

而我们要求的是最小路径和,所以状态转移方程就是:

dp[ i ][ j ] = min( dp[ i - 1 ][ j ],dp[ i ][ j - 1 ] ) + g[ i ][ j ]

3. 初始化

初始化是为了防止越界,所以我们只需要多加上面一行和左边一行即可,

不过里面填的值要保证不影响后面的填表,所以我们可以将整个表初始化成正无穷大,

然后为了让第一次填表不出问题,就把第一个位置上面的位置初始化成0即可。

4. 填表顺序

从上往下,从左往右

5. 返回值

返回右下角的最小路径和即可。

3. 代码编写

class Solution {
public:
    int minPathSum(vector<vector<int>>& grid) {
        int m = grid.size(), n = grid[0].size();
        vector<vector<int>> dp(m + 1, vector<int>(n + 1, INT_MAX));
        dp[0][1] = 0;
        for(int i = 1; i <= m; i++) {
            for(int j = 1; j <= n; j++) {
                dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i - 1][j - 1];
            }
        }
        return dp[m][n];
    }
};

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

相关文章
|
6月前
|
消息中间件 Kubernetes NoSQL
动态规划-状态压缩、树形DP问题总结
动态规划-状态压缩、树形DP问题总结
|
算法
【学会动态规划】最大子数组和(19)
【学会动态规划】最大子数组和(19)
47 0
|
1月前
|
存储
【动态规划】子数组系列
本文介绍了多个动态规划问题及其解决方案,包括最大子数组和、环形子数组的最大和、乘积最大子数组、乘积为正数的最长子数组长度、等差数列划分、最长湍流子数组、单词拆分及环绕字符串中唯一的子字符串。通过详细的状态定义、转移方程和代码实现,帮助读者理解每类问题的核心思路与解题技巧。
49 2
|
算法 Java Python
【LeetCode】 53. 最大子序和(动态规划)
53. 最大子序和(动态规划)
97 0
【LeetCode】 53. 最大子序和(动态规划)
爬楼梯(动态规划)
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
66 0
|
存储
三角形最小路径和(动态规划)
给定一个三角形 triangle ,找出自顶向下的最小路径和。
107 0
三角形最小路径和(动态规划)
|
算法 测试技术
贪心——53. 最大子数组和
本专栏按照数组—链表—哈希—字符串—栈与队列—二叉树—回溯—贪心—动态规划—单调栈的顺序刷题,采用代码随想录所给的刷题顺序,一个正确的刷题顺序对算法学习是非常重要的,希望对大家有帮助
贪心——53. 最大子数组和
|
算法
动态规划—区间DP(一)
AcWing算法提高课内容,本文讲解 动态规划
208 0
动态规划—区间DP(一)
|
算法
动态规划—区间DP(二)
AcWing算法提高课内容,本文讲解 动态规划
168 0
动态规划—区间DP(二)