これが最大 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. 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 ] 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(m n)だと思います。この問題に適合する最適なソリューションまたは動的計画法アルゴリズムはありますか?
ありがとう、長い質問でごめんなさい