51Nod-1118-机器人走方格

本文介绍了一道经典的动态规划问题——机器人走方格。在一个M*N的网格中,机器人从左上角出发到达右下角,每步只能向右或向下移动。文章详细解析了如何通过动态规划的方法计算出所有可能的路径数,并给出了解题代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

51Nod-1118-机器人走方格

                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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值