我没有什么限制。我不能从共享边的单元格中选择值(对角线也可以)。我可以从每一列中选择多个元素。
例如。我有一个矩阵
1 3 6 10 3
4 2 6 7 9
5 1 8 3 3
9 2 9 1 1
如果我选择1和5,首先我必须选择2和2,第二个是6和8,依此类推。
我能想出的最好方法是蛮力执行算法,但这是O(n ^ 4)任何想法吗? 我看过匈牙利算法,但是它在O(n)中也不起作用。
谢谢!
答案 0 :(得分:0)
如果矩阵限制为4 × n
,我们可以运行一个动态程序。假设我们对任何列的选择只能是以下一种:
a) x b) - c) - d) -
- x - -
- - x -
- - - x
e) x f) - g) x h) -
- x - -
x - - -
- x x -
当我们为元素选择选择模式f(i, p)
时,我们可以定义i
代表直到第p
列的最大和。然后:
f(i, a) = sum ith column elements pattern a + max(
f(i - 1, b),
f(i - 1, c),
f(i - 1, d),
f(i - 1, f),
f(i - 1, h)
)
f(i, b) = sum ith column elements pattern b + max(
f(i - 1, a),
f(i - 1, c),
f(i - 1, d),
f(i - 1, e),
f(i - 1, g),
f(i - 1, h)
)
etc.
由于p
仅限于8个选择,因此搜索空间为O(n * 8) = O(n)
。