Ctrl K

Перенос строк со штрафом

Средняя
Дан текст text — слова из строчных латинских букв, разделённые одиночными пробелами, — и ширина строки width. Текст нужно разбить на строки, вставляя переносы между словами: - слова нельзя разрывать и переставлять; - соседние слова в строке разделены ровно одним пробелом, в начале и конце строки пробелов нет; - длина каждой строки не больше width. Если строка имеет длину len, её штраф равен (width − len)². Штраф всего разбиения — сумма штрафов всех строк, **кроме последней**. Верните минимально возможный штраф.
Пример 1
text="we ship code daily", width=8 → 17

Лучше всего «we ship» (7 символов, штраф (8 − 7)² = 1), затем «code» ((8 − 4)² = 16) и последняя строка «daily» бесплатно. Итого 17.

Пример 2
text="tiny note", width=20 → 0

Весь текст помещается в одну строку, а последняя строка не штрафуется.

Пример 3
text="aa bb cc", width=5 → 0
Ограничения
  • 1 ≤ len(text) ≤ 5000
  • 1 ≤ width ≤ 5000
  • text состоит из строчных латинских букв и пробелов, не начинается и не заканчивается пробелом, слова разделены одиночными пробелами
  • Длина каждого слова не больше width
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиМеньше всего прыжков до конца СредняяСамая прибыльная серия дней СредняяДобраться до последней клетки СредняяМаршруты тележки по складу СредняяДешёвый маршрут из угла в угол Средняя
загружаем Python…
Вход
text="we ship code daily", width=8
Ожидается
17

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