题意
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。问总共有多少条不同的路径?
示例1:
从左上角开始,总共有 3 条路径可以到达右下角。
- 向右 -> 向下 -> 向下
- 向下 -> 向下 -> 向右
- 向下 -> 向右 -> 向下
样例1:
输入
m = 3, n = 7
输出:
28
样例2:
输入
m = 3, n = 2
输出
3
样例3:
输入
m = 7, n = 3
输出
28
样例4
输入
m = 3, n = 3
输出
6
实验数据
- 1 <= m, n <= 100
- 题目数据保证答案小于等于 2 * 109
动态规划的选择运用:
由于每一处都有选择,可以理解成当前位置的选择数量是由前者的可能属性的叠加,即为状态的叠加
#include<iostream>
using namespace std;
int main()
{
int n = 0;
int m = 0;
cin >> m >> n;
int q[100][100] = { 0 };
q[1][1] = 1;
for (int i = 1; i <= m; i++)
{
for (int k =1; k <= n; k++)
{
if (i == 1 && k == 1)
continue;
q[i][k] = q[i - 1][k] + q[i][k - 1];
}
}
cout << q[m][n];
return 0;
}