Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 11.06.2025
Сообщений: 3

Вывести маршрут максимальной стоимости

11.06.2025, 12:25. Показов 1522. Ответов 4
Метки нет (Все метки)

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


Решение данной задачи уже есть на этом сайте (Вывести маршрут максимальной стоимости (модифицировать)), однако хотелось бы решить другим способом: заполнять список с путём начиная с нижней правой ячейки. Вот мой код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
n, m = map(int, input().split())
p = [ list(map(int, input().split())) for i in range(n)]
a = [ [0] * m for i in range (n)]
#в этой переменной будет максимальная стоимость пути к этой ячейке
a [0][0] = p[0][0]
for j in range (1, m):
    a [0][j]= p[0][j] + a[0][j-1]
for i in range (1, n):
    a [i][0]= p[i][0] + a[i-1][0]
for i in range (1, n):
    for j in range (1, m):
        a[i][j]= p[i][j] + max (a[i-1][j], a[i][j-1])
print (a[-1][-1])
path = []
#здесь будет буквенно записан маршрут
n, m = n-1, m-1
while n!= 0 and m!=0:
    if a[n-1][m]> a[n][m-1]:
        path.insert(1, 'D')
        n-=1
    else:
        path.insert(1, 'R')
        m-=1 
print(path)
#знаю, что как в примере тут оформления вывода не будет
Почему-то при выводе (ввод как в примере) он не показывает первую и последнюю буквы
(выводит D R R R R D вместо D D R R R R D D ). Ткните где сделал не так. Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.06.2025, 12:25
Ответы с готовыми решениями:

Задача "Вывести маршрут максимальной стоимости"
Здравствуйте, помогите пожалуйста с решением задачи :) В левом верхнем углу прямоугольной...

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

Вывести маршрут максимальной стоимости: бесконечный цикл
Пытался решить задачу - не смог. Как понял - у меня бесконечный цикл Задача: Вывести маршрут...

4
 Аватар для andrey_f
884 / 537 / 228
Регистрация: 21.02.2011
Сообщений: 5,706
11.06.2025, 12:30
Python
1
2
3
4
5
6
7
8
9
10
11
path = []
#здесь будет буквенно записан маршрут
n, m = n-1, m-1
while n!= 0 and m!=0:
    if a[n-1][m]> a[n][m-1]:
        path.insert(1, 'D')
        n-=1
    else:
        path.insert(1, 'R')
        m-=1 
print(path)
напоминаю, что индексация идет с 0.
0
0 / 0 / 0
Регистрация: 11.06.2025
Сообщений: 3
11.06.2025, 13:01  [ТС]
Цитата Сообщение от andrey_f Посмотреть сообщение
Python
1
2
3
4
5
6
7
8
9
10
11
path = []
#здесь будет буквенно записан маршрут
n, m = n-1, m-1
while n!= 0 and m!=0:
    if a[n-1][m]> a[n][m-1]:
        path.insert(1, 'D')
        n-=1
    else:
        path.insert(1, 'R')
        m-=1 
print(path)
напоминаю, что индексация идет с 0.
изменил на
Python
1
2
3
4
5
6
7
8
9
10
ans = []
n, m = n-1, m-1
while n!=0 and m!=0:
    if a[n-1][m]> a[n][m-1] or m==0:
        ans.insert(0, 'D')
        n-=1
    else:
        ans.insert(0, 'R')
        m-=1 
print(ans)
теперь выводит R R R R D D. Насколько понимаю, когда утыкается в m==0, то перестаёт работать. Пытался изменить условия цикла, но безуспешно.
0
 Аватар для andrey_f
884 / 537 / 228
Регистрация: 21.02.2011
Сообщений: 5,706
11.06.2025, 13:10
Цитата Сообщение от juni.perus Посмотреть сообщение
теперь выводит R R R R D D. Насколько понимаю, когда утыкается в m==0, то перестаёт работать. Пытался изменить условия цикла, но безуспешно.
Плюс, важно правильно завершить маршрут — текущий код останавливается при n != 0 и m != 0, то есть он не учитывает случаи, когда один из индексов уже достиг границы.
я бы делал так
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
n, m = map(int, input().split())
p =[list(map(int, input().split())) for _ in range(n)]
a = [[0]*m for _ in range(n)]
 
# Заполняем таблицу стоимости
a[0][0] = p[0][0]
for j in range(1, m):
    a[0][j] = p[0][j] + a[0][j-1]
for i in range(1, n):
    a[i][0] = p[i][0] + a[i-1][0]
for i in range(1, n):
    for j in range(1, m):
        a[i][j] = p[i][j] + max(a[i-1][j], a[i][j-1])
 
max_sum = a[-1][-1]
print(max_sum)
 
# Восстановление маршрута
path = []
n_idx, m_idx = n-1, m-1
while n_idx > 0 or m_idx > 0:
    if n_idx == 0:
        path.append('R')
        m_idx -= 1
    elif m_idx == 0:
        path.append('D')
        n_idx -= 1
    else:
        if a[n_idx - 1][m_idx] > a[n_idx][m_idx - 1]:
            path.append('D')
            n_idx -= 1
        else:
            path.append('R')
            m_idx -= 1
 
path.reverse()
print(' '.join(path))
2
0 / 0 / 0
Регистрация: 11.06.2025
Сообщений: 3
11.06.2025, 13:13  [ТС]
О, спасибо! Оказалось, что можно просто в моём коде, который от 13:01, поменять and на or. (разумеется с учётом поправки по индексм)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.06.2025, 13:13
Помогаю со студенческими работами здесь

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

Вывести маршрут максимальной стоимости (модифицировать)
Вывести маршрут максимальной стоимости В левом верхнем углу прямоугольной таблицы размером N×M...

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

Вывести маршрут максимальной стоимости
Здравствуйте! Недавно решал задачу, вот ее текст. В левом верхнем углу прямоугольной таблицы...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru