Menu
CoddyTech

Matrix Chain Multiplication

Łańcuch macierzy jest opisany przez dims: macierz i ma dims[i] wierszy i dims[i+1] kolumn, więc każda macierz pasuje do następnej. Mnożenie macierzy p × q przez macierz q × r wymaga p × q × r mnożeń skalarnych i daje macierz p × r. Każdy sposób umieszczenia nawiasów daje ten sam wynik końcowy, ale nie przy takim samym koszcie. Zwróć najmniejszą liczbę mnożeń skalarnych potrzebną do pomnożenia całego łańcucha.

Funkcja

matrixChainOrder(dims: integer-array) → integer
dimsinteger-array
rozmiary wzdłuż łańcucha: macierz i ma wymiary dims[i] × dims[i+1]
Zwracainteger
najmniejsza liczba mnożeń skalarnych potrzebnych do pomnożenia całego łańcucha

Ograniczenia

  • 2 ≤ dims.length ≤ 100, więc łańcuch zawiera od 1 do 99 macierzy.
  • 1 ≤ dims[i] ≤ 100
  • Odpowiedź wynosi co najwyżej 98 × 106, znacznie poniżej zakresu 32-bitowej liczby całkowitej ze znakiem.

Przykłady

Wejście
dims = [4, 10, 3, 12]
Wyjście
264
Wyjaśnienie
Pomnożenie pierwszych dwóch kosztuje 4 × 10 × 3 = 120 i daje macierz 4 × 3, której pomnożenie przez macierz 3 × 12 kosztuje dodatkowo 144: 264. Druga kolejność kosztuje 360 + 480 = 840.
challenge icon

Pytanie dodatkowe

Czy możesz również policzyć, ile różnych sposobów nawiasowania pozwala osiągnąć minimalny koszt?

Zresetuj kod
def matrixChainOrder(dims):
    # Napisz kod tutaj

Test #1

Test #2

Test #3

Argument

dims = [4, 10, 3, 12]

Oczekiwany wynik

264