Условие задачи: Вам дана прямоугольная
матрица 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)
. Полученная последовательность шагов затем разворачивается для вывода
оптимального маршрута.