【问题标题】:What is Matrix Tracing? [closed]什么是矩阵追踪? [关闭]
【发布时间】:2014-02-07 13:52:03
【问题描述】:

下面是英语词典中排列成矩阵的单词

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

解释 让我们考虑一个单词 AWAY 写成矩阵

AWA
WAY

在这里,矩阵中的单词 AWAY 可以通过 3 种不同的方式进行跟踪,遍历 RIGHT 或 DOWN。

AWA
  Y

AW
 AY

A
WAY

【问题讨论】:

  • 我理解大家,这个问题可能是一个家庭作业,有些人想为此关闭它,但是为什么这个问题因为不清楚而被关闭?正如 OP 所说,“输出格式:打印可以追踪单词的方式(S)数”。
  • 这是来自现场编程挑战(hackerrank codesprint 5)...
  • @Ivan 非常感谢 :)。我只是想知道为什么它被关闭为“不清楚”,而不是其他的......

标签: algorithm matrix


【解决方案1】:

这是一个很好的问题,这就是我要回答的原因。然而,这似乎是一个家庭作业,或者是从编程奥林匹克中获得的一个问题,这就是为什么你得到这么多反对票的原因。答案是我们有 (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 次向右移动,N-1 次向下移动。

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

右下右

右下右下

右下右

所以这些只是 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));
}

希望对你有帮助

【讨论】:

  • 真的非常感谢..我想通了:)
  • 这对于非常大的输入如何工作(例如 m,n 甚至在 100+ 范围内)
  • @user3208840 很高兴它帮助了你:)
  • 可以使用Stirling's approximation 估计因子,我想这会使事情变得更快一些。虽然不知道准确性:)
  • 是的,我已经看到了。但是上面接受的解决方案只是一个公式,但我写了算法。我会找到优化它的方法。我认为这是一个动态规划问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-13
  • 1970-01-01
  • 2015-07-26
相关资源
最近更新 更多