Ctrl K

Разброс оценок при делении посылок

Сложная
На ленте лежат посылки, weights[i] — вес посылки i. Ленту нужно разрезать на groups непустых групп, каждая из которых — подряд идущий отрезок ленты (порядок посылок менять нельзя). Оценка группы — сумма весов её первой и последней посылки (если в группе одна посылка, её вес считается дважды). Оценка разбиения — сумма оценок всех групп. Верните разницу между наибольшей и наименьшей оценкой среди всех возможных разбиений.
Пример 1
weights=[2, 6, 1, 4], groups=2 → 3

Разрез после посылки 0: (2 + 2) + (6 + 4) = 14; после посылки 1: (2 + 6) + (1 + 4) = 13; после посылки 2: (2 + 1) + (4 + 4) = 11. Максимум 14, минимум 11, разница 3.

Пример 2
weights=[5, 9, 3], groups=3 → 0

Каждая посылка — отдельная группа, разбиение единственное, поэтому разница 0.

Пример 3
weights=[1, 8, 2, 7, 3], groups=3 → 2
Ограничения
  • 1 ≤ groups ≤ len(weights) ≤ 10⁵
  • 1 ≤ weights[i] ≤ 10⁹
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиНаращиваем капитал проектами СложнаяБольше заказов к сроку СложнаяСамый узкий отрезок для всех списков СложнаяБригада с оплатой по навыку СложнаяТемп отряда задаёт самый слабый Сложная
загружаем Python…
Вход
weights=[2, 6, 1, 4], groups=2
Ожидается
3

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 90 тестов на сервере, включая скрытые.