1118 机器人走方格
M * N的方格,一个机器人从左上走到右下,只能向右或向下走。有多少种不同的走法?
由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果。
Input
第1行,2个数M,N,中间用空格隔开。(2 <= m,n <= 1000)
Output
输出走法的数量。
Input示例
2 3
Output示例
3
解题方法
这是一道基础的动态规划题目。
每次到某个格子的走法都是它的前两个格子,即它上方格子和左方格子的走法数量之和。
那么定义子问题f(i, j)为
坐标为(i,j)时候的走法。
那么也就得出了状态转移公式:
f(i, j) = f(i-1, j)+f(i, j-1)
同时 定义第一个格子的走法为1,即f(0,0)=1。
解题代码
while True:
try:
n, m = list(map(int, input().split()))
Mod = 10**9 + 7
f = [ [0 for i in range(m+2)] for j in range(n+2)]
pre = [[-1,0], [0,-1]]
f[0][0] = 1
for i in range(n):
for j in range(m):
for k in range(2):
tx = i + pre[k][0]
ty = j + pre[k][1]
if tx < 0 or ty <0:
continue
f[i][j] = (f[tx][ty] + f[i][j])%Mod
print((f[n-1][m-1])%Mod)
except EOFError:
break