EduBrick

L. Триангуляция многоугольника

2000 мс · 256 МБ · всё или ничего

В вершинах выпуклого многоугольника написаны числа. Многоугольник разрезают диагоналями на треугольники; стоимость треугольника - произведение чисел в его вершинах. Найдите наименьшую суммарную стоимость.

Состояние - отрезок вершин по контуру. dp[i][j]dp[i][j] - наименьшая стоимость триангуляции многоугольника на вершинах i,i+1,…,ji, i+1, \ldots, j.

Ребро (i,j)(i, j) входит ровно в один треугольник; переберём его третью вершину kk:

dp[i][j]=min⁡i<k<j(dp[i][k]+dp[k][j]+aiakaj)dp[i][j] = \min_{i < k < j} \bigl( dp[i][k] + dp[k][j] + a_i a_k a_j \bigr)

База: dp[i][i+1]=0dp[i][i+1] = 0, вырожденный «многоугольник» из двух вершин ничего не стоит.

Обратите внимание, насколько это похоже на умножение матриц - и всё же не то же самое: там разрез шёл по промежуткам между матрицами, здесь по вершинам, и потому dp[k][j]dp[k][j], а не dp[k+1][j]dp[k+1][j]. Такие сдвиги на единицу - главный источник ошибок во всей теме; выписывайте, что именно обозначает индекс.

При n≤300n \le 300 и числах до 100 ответ доходит до 3⋅1083 \cdot 10^8 - помещается в 32 бита, но привычка считать в 64 дешевле.

Формат ввода

В первой строке - число nn (3≤n≤3003 \le n \le 300) - количество вершин.

Во второй строке - nn чисел aia_i (1≤ai≤1001 \le a_i \le 100) в порядке обхода.

Формат вывода

Одно число - наименьшая стоимость триангуляции.

Примеры

ввод
3
1 2 3
вывод
6
ввод
4
1 2 3 4
вывод
18
Войдите, чтобы отправлять решения.