【发布时间】:2015-05-07 14:42:18
【问题描述】:
我刚刚做了一个 Top Coder SRM,其中有一个问题我需要解决。我正在尝试在线搜索算法的详细信息,但似乎找不到。
这个问题围绕着以下几行展开: 你有一个数组,例如 [12, 10, 4]
每一轮,您可以应用 9,3,1 的任意排列从 [12,10,4] 中减去
返回为使数组中的所有数字变为 0 所需的最小排列量。
有什么帮助吗?
编辑:让我描述得更详细一些,以便更好地理解问题。
One question would be
input: [12 10 4]
output: 2 (minimum rounds)
How it would work:
[12 10 4] - [9 3 1] = [3 7 3]
[12 10 4] - [9 1 3] = [3 9 1]
[12 10 4] - [3 9 1] = ..
[12 10 4] - [3 1 9] = ..
[12 10 4] - [1 3 9] =
[12 10 4] - [1 9 3] =
[3 7 3] - [3 9 1] = ...
..
[9 1 3] - [9 1 3] = [0 0 0] <-- achieved with only two permutation subtractions
编辑2:
这是 topcoder 的问题: http://community.topcoder.com/stat?c=problem_statement&pm=13782
编辑3: 如果他们认为解决方案是动态规划,任何人都可以解释重叠子问题和最优子结构吗?
【问题讨论】:
-
是的,在纸上计算出来之后(显然我不能在我的脑海中这样做!),你的意思是像 [12, 10, 4] - [3, 9, 1] = [9, 1, 3] - [9, 1, 3] = [0, 0, 0]?
-
“最小排列量”是什么意思?对于你的例子,答案是什么?
-
我认为没有专门解决这个问题的经典算法。不过有趣的问题是,您的数组的最大长度是多少?
-
数组的最大大小是多少?
标签: algorithm recursion dynamic combinations permutation