这是我关于最大 L 总和的第一个问题,这是它的不同且困难的版本。
问题:给定一个mxn 正整数矩阵,求从第 1 行到第m 行的最小 L 和。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) 我们应该从第 1行到第3行,总和最小
我用动态编程解决了这个问题,这是我的算法:
1.取一个mxn另一个Minimum L Moves Sum数组并复制主矩阵的第一行。我称之为(MLMS)
2.从第一个单元格开始,向上查找 L 移动并计算它
3.如果它小于存在值,则将其插入 MLMS
4.执行步骤 2. 直到第 m行
5.选择最小值在第m行求和
让我逐步解释我的示例:
M[ 0 ][ 0 ] sum(L1 = (0, 1, 2, 2)) = 5 ; 总和(L2 =(0,1,3,2))= 6;所以 MLMS[ 0 ][ 1 ] = 6
sum(L3 = (0, 1, 3, 2)) = 6 ; 总和(L4 =(0,1,4,2))= 7;所以 MLMS[ 2 ][ 1 ] = 6M[ 0 ][ 1 ]总和(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(m n)。是否有适合此问题的最佳解决方案或动态规划算法?
谢谢,对不起,很长的问题