0
点赞
收藏
分享

微信扫一扫

[动态规划]BM67 不同路径的数目(一)-简单

​​BM67 不同路径的数目(一)​​

描述

一个机器人在m×n大小的地图的左上角(起点)。机器人每次可以向下或向右移动。机器人要到达地图的右下角(终点)。可以有多少种不同的路径从起点走到终点?[动态规划]BM67 不同路径的数目(一)-简单_路径问题

备注:m和n小于等于100,并保证计算结果在int范围内

数据范围:[动态规划]BM67 不同路径的数目(一)-简单_动态规划_02,保证计算结果在32位整型范围内要求:空间复杂度 ,时间复杂度 [动态规划]BM67 不同路径的数目(一)-简单_递归_03进阶:空间复杂度 ,时间复杂度 

示例1

输入:

2,1

复制返回值:

1

复制

示例2

输入:

2,2

复制返回值:

2

题解

动态规划解法

思路:

  1. 确定dp数组:使用dp[i][k]表示到达该坐标的所有方案
  2. 确定状态转移方程:
  1. 如果i=0或者k=0,那么dp[i][k]=1,因为在第一行或者是第一列
  2. 因为只有从i-1、k和i、k-1的坐标2种方式到达i、k坐标,因此dp[i][k]=dp[i-1][k] + dp[i][k-1]
  1. 遍历完整个矩阵,返回dp[m-1][n-1]


注:也可以使用递归求解,从略~

#include <bits/stdc++.h>

int uniquePaths(int m, int n)
{
std::vector<std::vector<int>> dp(m, std::vector<int>(n, 0));
for (int i = 0; i < m; ++i)
{
for (int k = 0; i < n; ++k)
{
if (i == 0 || k == 0)
{
dp[i][k] = 1;
continue;
}

dp[i][k] = dp[i][k - 1] + dp[i - 1][k];
}
}
return dp[m - 1][n - 1];
}
举报

相关推荐

0 条评论