什么是矩阵追踪?

时间:2014-01-18 02:40:37

标签: algorithm matrix

以下是英语词典中排列为矩阵的单词

MATHE
ATHEM
THEMA
HEMAT
EMATI
MATIC
ATICS

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

输入格式 第一行输入包含一个整数T.T测试用例跟随每一行。 每行包含2个空格分隔的整数m& n表示写入的矩阵有m行,每行有n个字符。

约束:

1 <= T <= 103
1 ≤ m,n ≤ 106

输出格式 按照问题陈述中的说明打印可跟踪单词的方式(S)。如果数量大于10,则为9 + 7, print S mod(10 rest to power 9 +7)

示例输入

1
2 3

示例输出

3

解释 让我们考虑写一个字作为矩阵

AWA
WAY

在这里,矩阵中的单词AWAY可以用3种不同的方式跟踪,遍历任意一个向右或向下。

AWA
  Y

AW
 AY

A
WAY

1 个答案:

答案 0 :(得分:5)

这是一个很好的问题,这就是我将回答它的原因。然而,它似乎是一个家庭作业,或者是从奥林匹克运动会中获得的一个问题,这就是为什么你有这么多的downvotes。答案是我们有(N-1 + M-1)!/((N- 1)!(M-1)!)给定M和N的不同路径。例如对于样本输入,我们有(2-1 + 3-1)!/((2-1)!(3-1) !)= 3!/(1 * 2),即6/2 = 3.

这是因为M-1移动RIGHT,N-1移动DOWN。

因此,对于您的示例,我们可以

右下方

右下方

向右右下方

所以这些只是M-1 RIGHT和N-1 DOWN的排列。 就这么简单。

这是简化的(从文件中读取等,已删除)算法

long getResult(int N, int M){
return Math.Factorial(N +M -2)/(Math.Factorial(N-1)*Math.Factorial(M-1));
}

希望有所帮助