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