题目难度:一星
考察点:动态规划

方法:动态规划

1.分析:

这个题我们采用动态规划的算法,设dp[i][j]表示位于坐标(i,j)时所有的走法数目,那么我们可以想坐标(i,j)可以由什么地方走到,那么显然由于小团只能向右或向下走,所以(i,j)只能由(i, j-1)和(i-1,j)坐标走到,所以就有如下状态转移方程:

初始化所有的dp[0][i] = dp[i][0] = 1。
拿样例来说:
算法实现:
(1). 输入一个n, m。
(2). 初始化所有的dp[0][i] = dp[i][0] = 1。
(3). 按照上状态转移方程进行求解dp[i][j]。
(4). 输出dp[n][m]

2.复杂度分析:

时间复杂度:O(n*m) 
空间复杂度:O(n*m)

3.代码:  

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e2+5;
int dp[MAXN][MAXN];
int main(){
    int n, m; cin>>n>>m;
    for(int i=0; i<MAXN; i++) dp[0][i] = dp[i][0] = 1;
    for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) dp[i][j] = dp[i-1][j] + dp[i][j-1];
    cout<<dp[n][m]<<endl;
    return 0;
}