Оптимальне множення матриць#9647

Оптимальне множення матриць

1 секунда
128 мегабайтів
Дуже легка

Маючи дві матриці A і B, ми можемо обчислити матрицю C = AB за стандартними правилами множення матриць:

prb1521

Кількість стовпців у матриці A повинна дорівнювати кількості рядків у матриці B. Нехай матриця A має розмір m × n, а матриця B — розмір n × p. Тоді матриця C матиме розмір m × p, і для її обчислення потрібно виконати m * n * p множень.

prb1521_4.gif

Наприклад, якщо A має розмір 10 × 20, а B — розмір 20 × 15, то для обчислення матриці C потрібно виконати 10 × 20 × 15 = 3000 множень.

prb1521_3.gif

Перемножувати кілька матриць можна різними способами. Наприклад, якщо у нас є матриці X, Y і Z, то обчислити XYZ можна як (XY)Z або X(YZ). Нехай X має розмір 5 × 10, Y — розмір 10 × 20, а Z — розмір 20 × 35.

prb1521.gif

Порахуємо кількість множень, необхідних для перемноження трьох матриць у кожному з цих двох випадків:

(XY)Z

X(YZ)

Очевидно, що при обчисленні (XY)Z потрібно менше множень.

prb1521_2.gif

За заданою послідовністю перемножуваних матриць потрібно знайти оптимальний порядок їх множення. Оптимальним вважається такий порядок, при якому кількість елементарних множень є мінімальною.

Вхідні дані

Перший рядок містить кількість n (n ≤ 10) матриць, які потрібно перемножити. Далі йдуть n пар цілих чисел, що описують кількість рядків і стовпців кожної матриці, у порядку їх множення.

Вихідні дані

Виведіть мінімальну кількість множень, необхідну для перемноження всіх матриць.

Приклади

Приклад 1

Loading
Loading

Приклад 2

Loading
Loading