
Вывести маршрут максимальной стоимости В левом верхнем углу прямоугольной таблицы размером 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

Ответы на вопрос

Ответ:
проверено на Сириусе
Объяснение:
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]))



Чтобы решить эту задачу, вы можете использовать динамическое программирование для поиска максимальной суммы на пути от верхнего левого угла таблицы до правого нижнего угла. Давайте напишем программу на Python:
pythondef find_max_sum_route(N, M, table):
# Создаем таблицу для хранения промежуточных результатов
dp = [[0] * M for _ in range(N)]
# Заполняем первую строку и первый столбец
for i in range(N):
for j in range(M):
if i == 0 and j == 0:
dp[i][j] = table[i][j]
elif i == 0:
dp[i][j] = dp[i][j - 1] + table[i][j]
elif j == 0:
dp[i][j] = dp[i - 1][j] + table[i][j]
else:
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + table[i][j]
# Восстанавливаем маршрут
i, j = N - 1, M - 1
route = []
while i > 0 or j > 0:
route.insert(0, "D" if i > 0 and (j == 0 or dp[i - 1][j] > dp[i][j - 1]) else "R")
i -= 1 if i > 0 and (j == 0 or dp[i - 1][j] > dp[i][j - 1]) else 0
j -= 1 if j > 0 and (i == 0 or dp[i - 1][j] <= dp[i][j - 1]) else 0
# Выводим результат
print(dp[N - 1][M - 1])
print(" ".join(route))
# Чтение входных данных
N, M = map(int, input().split())
table = [list(map(int, input().split())) for _ in range(N)]
# Вызываем функцию и выводим результат
find_max_sum_route(N, M, table)
Пример ввода-вывода, используя ваш пример:
mathematicaВвод:
5 5
9 9 9 9 9
3 0 0 0 9
9 9 9 9 6
6 6 6 8 9
9 9 9 9 9
Вывод:
74
D D R R R R D D


Похожие вопросы
Топ вопросов за вчера в категории Информатика







Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili