Menu
CoddyTech

Matrix Chain Multiplication

Цепочка матриц задаётся массивом 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
Пояснение
При умножении первых двух матриц получается 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