动态规划问题 -- 路径模型第一题(不同路径)

目录

  • 动态规划分析问题五步曲
  • 路径模型常用的分析方法(经验)
  • 题目概述
  • 代码编写

动态规划分析问题五步曲

不清楚动态规划分析问题是哪关键的五步的少年们可以移步到
链接: 动态规划算法基础
这篇文章非常详细的介绍了动态规划算法是如何分析和解决问题的

路径模型常用的分析方法(经验)

路径模型的问题通常会给出一个网格(所以我们的dp表应该开为二维的),我们通常的做法是选择网格中的一个位置然后分析网格周围的元素得出状态表示和状态转移方程

题目概述

链接: 不同路径

动态规划问题 -- 路径模型第一题(不同路径)_第1张图片

  1. 状态表示(题目要求+自己的经验)
    本题状态dp[i][j] :表示到第i位置j位置一共有多少路径
  1. 状态转移方程推导
    找到网格中一个位置,分析身边元素的状态
    得出状态转移方程式 dp[i][j] = dp[i-1][j] + dp[i][j-1]
    动态规划问题 -- 路径模型第一题(不同路径)_第2张图片
  1. 初始化(防止越界+结合状态表示初始化)
    dp表的行和列都扩一个位置,令新dp[0][1] = 1
    动态规划问题 -- 路径模型第一题(不同路径)_第3张图片
  1. 填表顺序(分析要填i位置前一个依赖状态的位置)
    dp[i][j] = dp[i-1][j] + dp[i][j-1] , 显然是从上到下,从左到右填表
  1. 返回值(由题目要求来)
    返回dp[m][n];

代码编写

分析了动态规划五步曲后就可以写出优雅的代码了

 int uniquePaths(int m, int n) {
        if(m == 1 && n == 1) return 1;

        vector<vector<int>> dp(m+1,vector<int>(n+1));
        dp[0][1] = 1;

        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];

        return dp[m][n];
    } 

少年今天的你又进步了一点点唷,明天继续加油吧
动态规划问题 -- 路径模型第一题(不同路径)_第4张图片

你可能感兴趣的:(动态规划,算法,c++,leetcode)