给定一个 n×m的方格阵,沿着方格的边线走,从左上角 (0,0) 开始,每次只能往右或者往下走一个单位距离,问走到右下角 (n,m) 一共有多少种不同的走法。
输入格式
共一行,包含两个整数 n 和 m。
输出格式
共一行,包含一个整数,表示走法数量。
数据范围
1≤n,m≤10
输入样例:
2 3
输出样例:
10
动态规划:
代码1:
#include<iostream>
using namespace std;
const int N = 11;
int pane[N][N];
int n,m;
int main()
{
cin >> n >> m;
for(int i = 0 ; i <= n ; i++)
{
for(int j = 0 ; j <= m ; j++)
{
if(!i||!j) pane[i][j] = 1;
else pane[i][j] = pane[i - 1][j] + pane[i][j - 1];
}
}
cout << pane[n][m];
return 0;
}
滚动数组优化:
代码2:
#include<iostream>
const int N = 11;
int q[N];
int n,m;
using namespace std;
int main()
{
cin >> n >> m;
for(int i = 0 ; i <= m ; i++)q[i] = 1;
for (int i = 1; i <= n; i ++ )
for (int j = 1; j <= m; j ++ )
q[j] += q[j - 1];
cout << q[m];
return 0;
}