Menu
CoddyTech

Matrix Chain Multiplication

むずかしい動的計画法python iconjava iconcpp iconc iconjs icon+10

行列の連鎖は dims で表されます。行列 i は dims[i] 行 dims[i+1] 列を持つため、各行列は次の行列と適合します。p × q 行列と q × r 行列の乗算には p × q × r 回のスカラー乗算が必要で、結果は p × r 行列になります。括弧の付け方をどう変えても最終的な積は同じですが、計算コストは同じとは限りません。連鎖全体の乗算に必要なスカラー乗算の最小回数を返してください。

関数

matrixChainOrder(dims: integer-array) → integer
dimsinteger-array
連鎖に沿ったサイズ:行列 i は dims[i] × dims[i+1] です
戻り値integer
連鎖全体を乗算するために必要なスカラー乗算の最小回数

制約

  • 2 ≤ dims.length ≤ 100なので、連鎖には1〜99個の行列が含まれます。
  • 1 ≤ dims[i] ≤ 100
  • 答えは最大でも 98 × 106 であり、32 ビット符号付き整数の範囲内に十分収まります。

例

入力
dims = [4, 10, 3, 12]
出力
264
説明
最初の2つを掛けると 4 × 10 × 3 = 120 となり、4 × 3 行列が残ります。これに 3 × 12 行列を掛けると 144 が加わり、合計は 264 です。もう一方の順序では 360 + 480 = 840 かかります。
challenge icon

発展問題

最小コストを実現する異なる括弧の付け方の数も数えられますか?

コードをリセット
def matrixChainOrder(dims):
    # ここにコードを書いてください

テスト #1

テスト #2

テスト #3

引数

dims = [4, 10, 3, 12]

期待される出力

264