Competitive Programming Academy · Урок

Минимальная сумма пути с препятствиями

Переносите минимальную стоимость через ячейки

Урок 2 из 413 шагов

«Минимальная сумма пути с препятствиями» — бесплатный урок Competitive Programming Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Competitive Programming Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Competitive Programming Academy содержит 4 уроков всего.

От подсчёта к стоимости

Теперь каждая ячейка содержит значение, а Вам нужен самый дешёвый маршрут к углу. Цель меняется: вместо подсчёта путей нужно минимизировать стоимость.

Определите состояние

Пусть dp[i][j] — наименьшая суммарная стоимость достижения ячейки (i, j). Сетка и ходы те же, но теперь мы отслеживаем суммы, а не количество путей.

Переход

Выбирайте из двух входящих соседей тот, путь через который дешевле, а затем прибавляйте значение текущей ячейки. Этот выбор минимума лежит в основе рекуррентной формулы.

dp[i][j] = grid[i][j] + min(dp[i-1][j], dp[i][j-1])

Отметьте препятствия

Препятствие — это ячейка, на которую нельзя встать. Назначьте ей бесконечную стоимость, чтобы путь через неё никогда не оказался минимальным.

INF = float('inf')

Корректно блокируйте ячейки

Если сетка помечает ячейку как заблокированную, просто установите для неё dp значение бесконечности и продолжайте. Шаг с выбором минимума естественным образом обойдёт её.

if blocked(i, j):
    dp[i][j] = INF
    continue

Проверьте начало

Если начальная ячейка заблокирована, пути вообще нет. Проверьте это сначала, чтобы не вернуть бессмысленную стоимость.

Инициализируйте первую ячейку

У начальной ячейки нет соседей, из которых можно прийти, поэтому её стоимость равна только её собственному значению. Установите dp[0][0] до запуска циклов.

dp[0][0] = grid[0][0]

Обработайте границы

Верхняя строка заполняется только слева, а левый столбец — только сверху. Обработайте эти границы, чтобы никогда не обращаться за пределы сетки.

Бесконечность распространяется

Прибавление к бесконечности снова даёт бесконечность, поэтому полностью отрезанная ячейка сохраняет стоимость INF. Недостижимые ячейки автоматически показывают это.

Прочитайте результат

Минимальная стоимость находится в правой нижней ячейке. Если там по-прежнему стоит бесконечность, допустимого пути вообще не существует.

ans = dp[m-1][n-1]
if ans == INF:
    ans = -1

Когда жадный подход здесь не работает

Если всегда идти к соседней ячейке с меньшим значением, можно попасть в ловушку. Только полный DP гарантирует глобально самый дешёвый путь, а не жадный выбор на один шаг.

Быстрая проверка

Как сделать так, чтобы DP для путей обходил заблокированную ячейку без особой обработки каждого соседа?

Повторение: минимальный путь с препятствиями

Выберите более дешёвого соседа и прибавьте значение ячейки, установите для заблокированных ячеек бесконечность и прочитайте значение в углу. INF в угловой ячейке означает отсутствие пути. 🧱

Можно начать бесплатно

Изучай Python с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
30
Уроки
120

Часто задаваемые вопросы

Урок «Минимальная сумма пути с препятствиями» бесплатный?

Да — полный текст урока «Минимальная сумма пути с препятствиями» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Competitive Programming Academy, подпишись на CoddyKit PRO. Курс Competitive Programming Academy содержит 4 уроков всего.

Чему я научусь в уроке «Минимальная сумма пути с препятствиями»?

Переносите минимальную стоимость через ячейки Ты практикуешь Competitive Programming Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Competitive Programming Academy?

Предыдущий опыт не требуется. Competitive Programming Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Минимальная сумма пути с препятствиями»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Competitive Programming Academy?

Да. Каждый урок Competitive Programming Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Подсчёт путей по сетке
  2. Минимальная сумма пути с препятствиями
  3. Наибольшая общая подпоследовательность
  4. Расстояние редактирования шаг за шагом
← Назад к Competitive Programming Academy