📌  相关文章
📜  从原点开始到达矩阵(X,Y)的方式数量(1)

📅  最后修改于: 2023-12-03 15:36:16.762000             🧑  作者: Mango

从原点开始到达矩阵(X, Y)的方式数量

这个问题可以用动态规划的方法解决。我们定义一个二维数组 $dp$,其中 $dp_{i,j}$ 表示从原点开始到达位置 $(i,j)$ 的方式数量。则有以下递推式:

$$ dp_{i,j}=dp_{i-1,j}+dp_{i,j-1} $$

其中 $dp_{0,0}=1$,$dp_{i,0}=1$,$dp_{0,j}=1$。

这个递推式的意思是,从位置 $(i,j)$ 可以从 $(i-1,j)$ 或 $(i,j-1)$ 走到,所以到达位置 $(i,j)$ 的方式数量即为到达这两个位置方式数量之和。

我们可以用双重循环来计算 $dp$ 数组,最终返回 $dp_{X,Y}$ 即可。

以下是 Python 实现:

def num_ways_to_reach(X, Y):
    dp = [[0] * (Y+1) for _ in range(X+1)]
    dp[0][0] = 1
    for i in range(1, X+1):
        dp[i][0] = 1
    for j in range(1, Y+1):
        dp[0][j] = 1
    for i in range(1, X+1):
        for j in range(1, Y+1):
            dp[i][j] = dp[i-1][j] + dp[i][j-1]
    return dp[X][Y]

使用方法:

num_ways = num_ways_to_reach(3, 4)
print(num_ways)  # 输出 35

以上代码返回的是从原点开始到达矩阵 $(3,4)$ 的方式数量,即 $35$。