【动态规划专栏】专题二:路径问题--------5.最小路径和

简介: 【动态规划专栏】专题二:路径问题--------5.最小路径和


题目来源

本题来源为:

Leetcode LCR 099. 最小路径和

题目描述

给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:一个机器人每次只能向下或者向右移动一步。

算法原理

1.状态表示

经验+题目要求

对于本题而言就是:

dp[i][j]表示:走到[i,j]位置的时候,最小路径和

2.状态转移方程

根据题目要求,最近的一步,划分问题,分两种情况:

因此状态方程为:

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

3.初始化

注意两点:

4.填表顺序

从上往下填每一行,每一行从左往右

5.返回值

返回dp[m][n];

代码实现

动态规划的代码基本就是固定的四步:

1.创建dp表
2.初始化
3.填表
4.返回值

本题完整代码实现:

class Solution 
{
public:
    int minPathSum(vector<vector<int>>& grid) 
    {
        int m=grid.size(),n=grid[0].size();
        //创建dp表
        vector<vector<int>> dp(m+1,vector<int>(n+1,INT_MAX));
        //初始化
        dp[0][1]=dp[1][0]=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];
    }
};

时间复杂度:O(MN)
空间复杂度:O(M
N)

相关文章
|
6月前
|
算法
【动态规划专栏】专题一:斐波那契数列模型--------2.三步问题
【动态规划专栏】专题一:斐波那契数列模型--------2.三步问题
40 3
|
6月前
|
算法
【动态规划专栏】专题三:简单多状态dp--------2.打家劫舍II
【动态规划专栏】专题三:简单多状态dp--------2.打家劫舍II
52 0
|
6月前
|
算法
【动态规划专栏】动态规划:似包非包---不同的二叉树
【动态规划专栏】动态规划:似包非包---不同的二叉树
46 0
|
6月前
|
算法
【动态规划专栏】动态规划:卡特兰数---不同的二叉树
【动态规划专栏】动态规划:卡特兰数---不同的二叉树
70 0
|
6月前
|
算法 机器人
【动态规划专栏】专题二:路径问题--------1.不同路径
【动态规划专栏】专题二:路径问题--------1.不同路径
55 1
|
6月前
|
算法
【动态规划专栏】专题三:简单多状态dp--------3.删除并获得点数
【动态规划专栏】专题三:简单多状态dp--------3.删除并获得点数
56 1
|
6月前
|
机器学习/深度学习 算法
【动态规划专栏】专题四:子数组问题--------最大子数组和&&环形子数组的最大和
【动态规划专栏】专题四:子数组问题--------最大子数组和&&环形子数组的最大和
59 1
|
6月前
|
算法 测试技术
【动态规划专栏】专题四:子数组问题--------最大子数组和&&环形子数组的最大和1
【动态规划专栏】专题四:子数组问题--------最大子数组和&&环形子数组的最大和1
54 1
|
6月前
|
算法
【动态规划专栏】专题二:路径问题--------6.地下城游戏
【动态规划专栏】专题二:路径问题--------6.地下城游戏
52 0
|
6月前
|
算法 机器人
【动态规划专栏】专题二:路径问题--------2.不同路径II
【动态规划专栏】专题二:路径问题--------2.不同路径II
44 0