Algolume

ДП: Задача с черепашкой

Условие задачи: Вам дана прямоугольная матрица matrix размера n×m, где каждая ячейка содержит число – стоимость прохождения через неё. Черепашка стартует в клетке (0, 0) и может перемещаться только вправо или вниз. Необходимо найти путь от клетки (0, 0) до (n-1, m-1) с минимальной суммарной стоимостью и вывести последовательность шагов.

Формат входных данных: В первой строке заданы два числа n и m (1 ≤ n, m ≤ 1000). Далее следуют n строк, каждая из которых содержит m целых чисел церез пробел, где 0 ≤ matrix[i][j] ≤ 100.

Формат выходных данных: В первой строке выведите минимальную суммарную стоимость, а во второй — последовательность символов R (вправо) и D (вниз), обозначающих шаги черепашки (например: RRDRD).

Решение: Для решения задачи применяется метод динамического программирования. Создаётся двумерный массив dp, где dp[i][j] означает минимальную стоимость пути от клетки (0,0) до клетки (i,j). Дополнительно формируется массив parent для восстановления маршрута, где parent[i][j] хранит информацию о направлении предыдущего шага ('R' — если переход был выполнен из левой ячейки, и 'D' — если из верхней).

Начальное условие:

dp[0][0] = matrix[0][0]

Для остальных ячеек выбираем оптимальный переход — из ячейки сверху или слева, одновременно обновляя предка текущей ячейки:

После заполнения массива dp значение dp[n-1][m-1] является искомой минимальной стоимостью, а массив parent позволяет восстановить оптимальный путь.

Например, если дана матрица:

то после вычислений получим:

Восстановление пути: Начните с клетки (n-1, m-1) и, следуя указателям массива parent, вернитесь к клетке (0, 0). Полученная последовательность шагов затем разворачивается для вывода оптимального маршрута.

Визуализация алгоритма (Python3)

Для корректной работы визуализации ограничения на входные данные следующие: 1 ≤ n, m ≤ 8.

Логическое название Название переменной
dp
parent