0
点赞
收藏
分享

微信扫一扫

1118 机器人走方格

少_游 2023-02-18 阅读 50


1118 机器人走方格

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] 。

 

dp[i-1][j]

 

dp[i][j-1]

 dp[i[j]

 

 

 

 

#include <iostream> 
#include <cstdio>
#include <algorithm>
#include <string>
using namespace std ;
typedef long long LL ;
/*
机器人走方格

dp[i][j] 表示 i 行 j 列的网络走法数

dp[i-1][j-1+1] 是向右的走法数量
dp[i-1+1][j-1] 是向下
dp[i][j ] 当前的走法是 i-1 时 向右和向下的步伐总和数
*/
const int MAX = 1005 ;
const int inf = 0x3f3f3f3f ;
const int mod = 1e9+7 ;
LL dp[MAX][MAX] ;
LL solve(LL m, LL n ) {
if(n==1 || m ==1 ) {
return 1 ;
}
return solve(m-1,n) % mod + solve(m,n-1) %mod;
}
void solve2(LL m , LL n) {
// dp[i][j] 表示 i 行 J 列的 走法
dp[1][1] = 1 ;
for(int i = 1 ; i<=m ; i++) dp[i][0] = 1 ;
for(int i = 1 ; i<=n ; i++) dp[0][i] = 1 ;
for(int i = 1 ;i<=m ; i++ ) {
for(int j = 1 ; j<=n ; j++ ) {
dp[i][j] = dp[i-1][j] + dp[i][j-1] %mod;
}
}
return ;

}
int main(){

LL n , m ;
cin >> m >> n ;
solve2(m,n) ;
// for(LL i = 1 ; i<=m ; i++ ) {
// for(LL j = 1 ; j<=n ; j++ ) {
// cout<<i <<" "<<j<<" " <<solve(i,j )<<endl;
// }
// }
cout<<dp[m-1][n-1]%mod<<endl;

return 0 ;
}

 

举报

相关推荐

0 条评论