矩阵从左上到右下导航,只能向右或向下移动?

Posted

技术标签:

【中文标题】矩阵从左上到右下导航,只能向右或向下移动?【英文标题】:Navigation of matrix from left top to right bottom, only moving to the right or downwards? 【发布时间】:2014-01-20 04:36:44 【问题描述】:

实际问题是这样的,我从在线比赛中得到。我解决了它,但我的 C 语言解决方案无法及时为大量数字提供答案。我需要用 C 来解决它。

以下是英语词典中的一个以矩阵形式排列的单词:

MATHE
ATHEM
THEMA
HEMAT
EMATI
MATIC
ATICS

从左上角开始跟踪矩阵,每一步向右或向下移动,到达矩阵的右下角。可以确保任何此类跟踪都会生成相同的单词。对于长度为 m+n-1 的给定单词,写成大小为 m * n 的矩阵,可以进行多少次这样的跟踪?

1 ≤ m,n ≤ 10^6

我必须按照问题陈述中的说明打印出可以追踪 S 单词的方式的数量。如果数字大于 10^9+7,我必须打印 S mod (10^9 + 7)。

在测试用例中,m 和 n 可以很大。

【问题讨论】:

【参考方案1】:

想象一下遍历矩阵,无论你选择什么路径,你都需要精确地 n+m-2 步来生成单词,其中 n-1 向下,m-1 向右,它们的顺序可能会改变,但数字 n-1 和 m-1 保持不变。所以问题被简化为只从 n+m-2 中选择 n-1 个位置,所以答案是

C(n+m-2,n-1)=C(n+m-2,m-1)

如何计算这个问题的 C(n,r):

您一定知道如何在模运算中将两个数字相乘,即

(a*b)%mod=(a%mod*b%mod)%mod,

现在要计算 C(n,r),您还需要除法,但模算术中的除法可以通过使用数字的模乘逆来执行,即

((a)*(a^-1))%mod=1

当然,模算术中的 a^-1 不必等于 1/a,并且可以使用扩展欧几里得算法计算,因为在您的情况下 mod 是一个素数

(a^(-1))=a^(mod-2)%mod

a^(mod-2) 可以使用重复平方方法有效地计算。

【讨论】:

我知道这个解决方案,但是我如何计算大数的阶乘,例如 50 或 100 在问题中提到它可以达到 10^6。 你能解释一下如何 (a^(-1))=a^(mod-2)%mod . @vj1207 它是模算术中的一个属性。【参考方案2】:

我建议使用动态编程方法来解决这个问题,因为计算大数的阶乘需要很多时间,尤其是当您有多个查询时。

从一个小矩阵(比如2x1)开始,不断寻找更大矩阵的解决方案。请注意,此解决方案有效,因为在寻找更大矩阵的解决方案时,您可以使用针对较小矩阵计算的值并加快计算速度。

上述解决方案 IMO 的复杂性是 MN 中的多项式 MxN 矩阵。

【讨论】:

【参考方案3】:

使用拉普拉斯三角形,错误地命名为“二项式”

1  0  0  0  0
0  0  0  0  0
0  0  0  0  0
0  0  0  0  0
0  0  0  0  0

1  1  0  0  0
1  0  0  0  0
0  0  0  0  0
0  0  0  0  0
0  0  0  0  0

1  1  1  0  0
1  2  0  0  0
1  0  0  0  0
0  0  0  0  0
0  0  0  0  0

1  1  1  1  0
1  2  3  0  0
1  3  0  0  0
1  0  0  0  0
0  0  0  0  0

1  1  1  1  1
1  2  3  4  0
1  3  6  0  0
1  4  0  0  0
1  0  0  0  0

1  1  1  1  1
1  2  3  4  5
1  3  6 10  0
1  4 10  0  0
1  5  0  0  0

1  1  1  1  1
1  2  3  4  5
1  3  6 10 15
1  4 10 20  0
1  5 15  0  0

1  1  1  1  1
1  2  3  4  5
1  3  6 10 15
1  4 10 20 35
1  5 15 35  0

1  1  1  1  1
1  2  3  4  5
1  3  6 10 15
1  4 10 20 35
1  5 15 35 70

明白了吗?请注意,元素可以算作二项式成员。诊断成员在这里:C^1_2、C^2_4、C^3_6、C^4_8 等等。选择您需要的。

【讨论】:

我知道它就像帕斯卡三角形,但上面问题中的行和列可能并不总是相同的。

以上是关于矩阵从左上到右下导航,只能向右或向下移动?的主要内容,如果未能解决你的问题,请参考以下文章

hiho 1617 - 方格取数 - dp

动态规划---从左上角到右下角的价值最大的路径

从矩阵的左上角到右下角找到路径的最快方法

小奇的矩阵(动态规划

AcWing 275. 传纸条

回溯算法卡住了