赞
踩
本文为动态规划算法的第3篇,前两篇主要分享一维动态规划算法。本篇将分享二维动态规划算法的用法,主要用于处理路径问题,如:不同路径,最短路径... 下面通过例题来一起学习动态规划算法吧!
对应习题链接:62. 不同路径 - 力扣(LeetCode)
1.创建一个二维的dp表,dp[ i ][ j ]表示走到 i, j 位置时一共有多少种方法。
2.初始化问题,机器人起点(如果只有一个格子,也就是只有一条路径,所以dp[ 0 ][ 1 ]或者dp[ 1 ][ 0 ]要初始化为1,机器人此时的位置是1,1。所以要多开1行1列。)
- class Solution {
- public:
- int uniquePaths(int m, int n) {
- vector<vector<int>>dp(m+1,vector<int>(n+1)); //多开1行1列
- dp[0][1]=1;
- for(int i=1;i<=m;i++) //初始位置从1,1(假如从0,0开始循环会越界)
- {
- for(int j=1;j<=n;j++)
- {
- dp[i][j]=dp[i-1][j]+dp[i][j-1];
- }
- }
- return dp[m][n];
- }
- };
对应习题链接:64. 最小路径和 - 力扣(LeetCode)
- 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]=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];
- }
- };
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
本篇通过两篇二维数组中的动态规划思想解决了问题,希望可以对大家的解题有所帮助,后续我会继续在本专栏更新动态规划算法的其他应用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。