💖作者:小树苗渴望变成参天大树
🎉作者宣言:认真写好每一篇博客
🎊作者gitee:gitee
💞作者专栏:C语言,数据结构初阶,Linux,C++ 动态规划算法
如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧!
文章目录
- 前言
 
前言
今天博主来更新动态规划算法的第五题了,相比较前面的两题,这个题目还是比较容易理解的,题目看上去难,但是用动态规划就特别容易,我们一起来进入讲解吧
第五个题目是不同路径
 
图解:
 这题理解起来不难,我直接用动态规划的步骤给大家讲解:
-  
状态表示:经验+题目要求
因为这是一个二维图形了,又有横坐标,又有竖坐标,所以一个变量是不够的,以(i,j)位置为结尾,dp[i][j]表示:从起点到(i,j)位置的有多少种方法 -  
状态转移方程:以最近位置的状态来算当前位置的状态

根据图解状态转移方程为dp[i][j]==dp[i-1][j]+dp[i][j-1]; -  
初始化:保证数组不越界

我们只需要多开辟一行和一列,作为虚拟节点就可以解决初始化繁琐的是 -  
填表顺序:从下往下写每一行,每一行从左往右
 -  
返回值:根据上面的图解:下标的映射关系,返回dp[m][n];
 
代码实现:
class Solution {
public:
    int uniquePaths(int m, int n) {
        //1.创建dp表
        vector<vector<int>> dp (m+1,vector<int>(n+1));//多创建一行一列,为了把初始化工作放在填表里面
        //2.初始化
        dp[1][0]=1;
        //3.填表顺序
        for(int i=1;i<=m;i++)
            for(int j=1;j<=n;j++)
                dp[i][j]=dp[i-1][j]+dp[i][j-1];
         //4返回值
        return dp[m][n];
    }
};
 
运行结果:
 
今天的题目就讲解完毕了,把上一题的处理边界及初始化问题再次使用到了,题目理解了就不难,希望大家下去可以学会这种做题的方法,我们下题再见





















