Задача: подсчета кол-ва возможных маршрутов

Решаем задачу с литкода №1575 Count All Possible Routes.

Дан массив чисел, описывающий города. Указаны индексы стартового города (start) и города, куда нужно приехать (finish), а также запас топлива (fuel). Требуется найти кол-во путей, по которым можно добраться до города-назначения, при заданном запасе топлива.

Перемещение между городами стоит некоторых затрат топлива. В данной задаче указывается, что затраты топлива определяются модулем разницы между числами, описывающими пару городов.

Также говориться, что можно неоднократно посещать города, включая начальный и конечный пункт, пока есть топливо.

Более классический вариант этой задачи исключает последнее требование, т.е. посещать города можно только один раз. Рассмотрим сначала классику, а затем вернемся к leetcode.

Решение (классический вариант)

Напрашивается использование рекурсии, где на каждой итерации мы исключаем посещенный город, а также уменьшаем запас топлива. Оставшиеся города рассматриваем как кандидатов для продолжения маршрута. И подсчитываем сумму маршрутов.

Рекурсия останавливается, если топлива не хватало для того, чтобы достигнуть очередной локации (вернем ноль). Если достигнута точка назначения, то вернем единицу.

Классика помогает понять принцип решения данной задачи. Очевидно также, что тут нужно использовать мемоизацию для ускорения вычислений. Мы это сделаем в следующем решении.

Решение (задача с литкода)

Суть решения точно такая же, только локации мы можем посещать много раз.

Если локация совпала с конечной, то счетчик стартует не с нуля, а с единицы. Вот и всё отличие.

Теперь добавим требование «вернуть число не более чем 1e9+7» и щепотку оптимизации :).

Мало букафф? Читайте есчо !

Задача о поиске всех подходящих под-сум

Июль 1, 2023 г.

№560 leetcode Subarray Sum Equals K. Есть массив чисел, и дано значение k. Надо найти все последовательные под-массивы сумма которых равна k. В условиях также сказано, что числа в массиве могут быть как положительные, так и отрицательные. Если ...

Читать

Вычисление заголовка столбца в Excel

Март 23, 2023 г.

Leetcode задача #168. Excel Sheet column title.Задача помечена как простая, тем не менее, не сразу понял как её решать. Дано число, это номер столбца для Excel таблицы, требуется сгенерировать его буквенное имя. Иными словами сопоставить 1 -> A, ...

Читать

Задача о поиске лучшей сделки

Февраль 2, 2023 г.

Это еще одна классическая задача программирования о поиске некой лучшей пары чисел в массиве. Задача формулируется следующим образом. Есть массив стоимости ...

Читать

GreyCode генератор

Май 3, 2023 г.

Задачи с бинарными последовательностями мне очень нравятся из-за их "эвристичности". Решение часто скрывается в двух шагах, но додуматься не просто. Следующая задача описывается так - нужно сгенерировать n-разрядный "серый код". Если вы не ...

Читать
 

Комментарии к «Задача: подсчета кол-ва возможных маршрутов»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: