この課題は、いくつかの行列の積に対して最も効率的な乗算次数を計算することです。
行列のサイズは、標準入力の1行で指定されます。総乗算コストを最小限に抑えるには、乗算を実行する順序を示す整数のリストを標準出力に出力する必要があります。
例1
入力
5x6 6x12 12x100 100x7
出力
3 2 1
入力行は、スペースで区切られた行列サイズのリストであり、それぞれの行は行の数であり、その後に、x列の数が続きます。この例では、一緒に乗算する4つの行列があります(したがって、合計3つの乗算)。行列の乗算は結合的であるため、それらは任意の順序で実行できます。
出力は、総コストを最小限に抑えるために乗算を実行する順序でなければなりません。これは、次に実行する乗算のインデックスを表す整数のスペース区切りリストである必要があります。N行列の場合、このリストには1からN-1までの数値が含まれている必要があります。たとえば、出力3 2 1は、12x100 * 100x7最初に乗算を実行し、次に6x12 * 12x7乗算(2番目の行列に前のステップの結果を5x6 * 6x7掛けたもの)、最後に結果の乗算を実行する必要があることを意味します。
行列の乗算は常に互換性があります。つまり、行列の列数は後続の行列の行数と一致します。二つの行列の乗算のコストと想定しAxB * BxCているがA*B*C。
コードは最大100の行列のリストを処理する必要があり、各次元は最大999であり、妥当な時間内に処理する必要があります。
例2
入力
5x10 10x5 5x15 15x5
出力
1 3 2
または
3 1 2
例3
入力
22x11 11x78 78x123 123x666 666x35 35x97 97x111 111x20 20x50
出力
2 3 4 5 6 7 8 1
注:確認のため、3つの例の最適な合計コストは9114、750、および1466344です。
最短のコードが勝ちます!