L. Распил брусьев
Брус длиной надо распилить в заданных местах. Распил бруска длиной стоит рублей независимо от того, где именно пилят. Найдите наименьшую суммарную стоимость.
Пример из условия: брус длиной 10, распилы на 2, 4 и 7. Если пилить по порядку 2, 4, 7 - это . Если сначала на 4, потом 2, потом 7 - .
Состояние
Добавим к списку распилов концы бруса: и . Тогда любой кусок в процессе работы - это отрезок между двумя точками из этого списка.
- стоимость распила куска от до по всем внутренним точкам. Перебираем, какой распил делается первым:
Слагаемое - это цена первого распила: он всегда делается по целому куску, какой бы точки ни касался. База: , внутри резать нечего.
Это ровно та же схема, что в задаче про склейку куч, только «снаружи внутрь», а не «изнутри наружу». Полезно заметить, что и слагаемое поменялись местами по сравнению с умножением матриц: там цена зависела от точки разреза, тут - нет.
при - миллион операций.
Про жадность
Соблазн пилить всегда посередине силён, и на примере из условия он даже срабатывает. Но это не общее правило: постройте набор из двух распилов, на котором «посередине» проигрывает, - это полезнее, чем прочитать про это здесь.
Подробнее: «Динамика по подотрезкам».
Формат ввода
В первой строке - числа и (, ) - длина бруса и количество распилов.
Во второй строке - чисел () в строго возрастающем порядке.
Формат вывода
Одно число - наименьшая стоимость распила.
Примеры
10 3 2 4 7
20
2 1 1
2