【发布时间】:2010-12-23 13:38:07
【问题描述】:
这是我的first question 关于最大 L 总和,这是它的不同和硬版本。
问题:给定一个 mxn 正 整数矩阵,求从 第 1 行 到 第 m 行。 L(4项)喜欢象棋马步
示例:M = 3x3
0 1 2
1 3 2
4 2 1
可能的 L 步是:(0 1 2 2), (0 1 3 2) (0 1 4 2) 我们应该从 1th 行到 3th 行,总和最小
我用动态编程解决了这个问题,这是我的算法:
1. 取一个 mxn 另一个 Minimum L Moves Sum 数组并复制主矩阵的第一行。我称之为 (MLMS)
2. 从第一个单元格开始,向上查找 L 移动并计算它
3. 如果小于存在值,则将其插入 MLMS
4. 执行第 2 步。直到第 m'th 行
5. 选择第 m'th 中的最小总和> 行
让我一步一步解释我的例子:
M[ 0 ][ 0 ] sum(L1 = (0, 1, 2, 2)) = 5 ;总和(L2 =(0,1,3,2))= 6;所以 MLMS[ 0 ][ 1 ] = 6
总和(L3 = (0, 1, 3, 2)) = 6;总和(L4 =(0,1,4,2))= 7;所以 MLMS[ 2 ][ 1 ] = 6-
M[ 0 ][ 1 ] sum(L5 = (1, 0, 1, 4)) = 6;总和(L6 =(1,3,2,4))= 10;所以 MLMS[ 2 ][ 2 ] = 6
... 最后一个 MSLS 是:
0 1 2
4 3 6
6 6 6
表示 6 是从 0 到 m 可以达到的最小 L 和。
我认为是 O(8*(m-1)n) = O(mn)。是否有适合此问题的最佳解决方案或动态规划算法?
谢谢,问了这么长的问题
【问题讨论】:
标签: algorithm big-o dynamic-programming shortest-path