Ctrl K

Самый дешёвый путь по камням

Сложная
Через реку выложен ряд из n камней с номерами от 1 до n. Встать на камень i стоит fees[i - 1] монет; если fees[i - 1] = -1, камень затоплен и на него вставать нельзя. Первый камень никогда не затоплен. Вы стоите на камне 1 и уже заплатили за него. С камня i можно прыгнуть на камень i + d, где 1 ≤ d ≤ max_jump и i + d ≤ n. Нужно добраться до камня n, заплатив в сумме как можно меньше (включая первый и последний камни). Верните номера камней на самом дешёвом пути в порядке посещения. Если таких путей несколько, верните лексикографически наименьший: сравниваем списки по первому различающемуся элементу, а если один список — начало другого, меньше тот, что короче. Если до камня n не добраться, верните пустой список.
Пример 1
fees=[2, 5, 1, 3, 1, 4], max_jump=2 → [1, 3, 5, 6]

Камни 1 → 3 → 5 → 6 стоят 2 + 1 + 1 + 4 = 8 — дешевле не получится.

Пример 2
fees=[1, 0, 0, 1], max_jump=3 → [1, 2, 3, 4]

Пути 1 → 4, 1 → 2 → 4 и 1 → 2 → 3 → 4 стоят по 2. Сравниваем по второму элементу: у двух последних там 2, у первого 4. Затем [1, 2, 3, 4] меньше [1, 2, 4] по третьему элементу.

Пример 3
fees=[3, -1, -1, 2], max_jump=2 → []

С первого камня можно прыгнуть только на камни 2 и 3, а оба затоплены.

Ограничения
  • 1 ≤ n = len(fees) ≤ 1000
  • -1 ≤ fees[i] ≤ 100
  • fees[0] ≠ -1
  • 1 ≤ max_jump ≤ 100
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиВода между стенами СложнаяСамый большой горящий блок СложнаяПрибыль за две сделки СложнаяВсе способы расставить пробелы СложнаяПереход через пещеру Сложная
загружаем Python…
Вход
fees=[2, 5, 1, 3, 1, 4], max_jump=2
Ожидается
[1, 3, 5, 6]

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