51nod 1118 机器人走方格【dp】

M * N的方格,一个机器人从左上走到右下,只能向右或向下走。有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果。

 收起

输入

第1行,2个数M,N,中间用空格隔开。(2 <= m,n <= 1000)

输出

输出走法的数量。

输入样例

2 3

输出样例

3

思路:这道题也是较简单的,由于机器人只能向下或者向右走,所以在最后一步即右下时,它有两种途径,即从它左边或者上边到达的。

另dp[i][j]表示走到(i,j)点的路径数目,可以得到递推式:dp[i][j]=dp[i-1][j]+dp[i][j-1];

另外要处理一下边界,另第一行和第一列都为1,其实不难理解,边界的路径数目都为1。

#include<cstdio>
#include <iostream>
using namespace std;
const int mod=1e9+7;
const int maxn=1005;
int dp[maxn][maxn];
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;++i)
        dp[i][0]=1;
    for(int j=0;j<m;++j)
        dp[0][j]=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])%mod;
    printf("%d
",dp[n-1][m-1]);
    return 0;
}
原文地址:https://www.cnblogs.com/aerer/p/9930913.html