Вывести маршрут максимальной стоимости
В левом верхнем углу прямоугольной таблицы размером N×M находится черепашка. В каждой клетке таблицы записано некоторое число. Черепашка может перемещаться вправо или вниз, при этом маршрут черепашки заканчивается в правом нижнем углу таблицы.

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

Входные данные

В первой строке входных данных записаны два натуральных числа N и M, не превосходящих 100 — размеры таблицы. Далее идут N строк, каждая из которых содержит M чисел, разделенных пробелами — описание таблицы. Все числа в клетках таблицы целые и могут принимать значения от 0 до 100.

Выходные данные

Первая строка выходных данных содержит максимальную возможную сумму, вторая — маршрут, на котором достигается эта сумма. Маршрут выводится в виде последовательности, которая должна содержать N−1 букву D, означающую передвижение вниз и M−1 букву R, означающую передвижение направо. Если таких последовательностей несколько, необходимо вывести ровно одну (любую) из них.
ПРИМЕР
ввод
5 5
9 9 9 9 9
3 0 0 0 0
9 9 9 9 9
6 6 6 6 8
9 9 9 9 9

вывод
74
D D R R R R D D


Аноним: проходись по всем поддоиганалям, значение в точке (x, y) будет max( (x-1, y), (x, y+1)), ну если наша точка находиться в самом вверху, то ее значение приравнивается точки сзади, а если на самой левой грани, то ее значение равняется точки сверху
Аноним: после этого углу таблицы у нас будет максимальное значение суммы
Аноним: ее и выводим
Аноним: потом начиная сзади просматриваем на кокой клетки больше значение, если она вверху пишем D, если нет R. Полученный массив мы разворачиваем и выводим в ответ
Аноним: самая сложная часть в риализации это проход по диагоналям
Аноним: поддиагоналям*
Аноним: а так легкая задача

Ответы

Ответ дал: raaldo
5

Ответ:

проверено на Сириусе

Объяснение:

global n,m,matrix,pathmatrix

 

#Возвращает минимальный путь от (0,0) до (x,y)

def rec(x, y):

   try:

       return pathmatrix[x,y]

   except:

       if x > 0:

           left = rec(x - 1, y)

       else:

           left = (-1,[])

       if y > 0:

           up = rec(x, y - 1)

       else:

           up = (-1,[])

       maxdist = max(left[0], up[0]) + matrix[x][y]

       if left[0] > up[0]:

           path = pathmatrix[x - 1,y][1].copy()

           path.append('D')

       else:

           path = pathmatrix[x,y - 1][1].copy()

           path.append('R')

       pathmatrix[x,y] = (maxdist,path)

       return pathmatrix[x,y]

 

n,m = [int(i) for i in input().split()]

matrix = [[int(i) for i in input().split()] for j in range(n)]

#Тут будем хранить минимальную дистанцию и путь до каждой клетки от (0,0)

pathmatrix = {(0,0) : (matrix[0][0], [])}

res = rec(n-1,m-1)

print(res[0])

print(' '.join(res[1]))

Похожие вопросы