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

Python: Найти маршрут с максимальной стоимостью
В верхнем левом углу прямоугольной таблицы размером N×M находится черепашка. Каждая клетка таблицы содержит число. Черепашка может перемещаться только вправо или вниз, и её маршрут заканчивается в нижнем правом углу таблицы. Мы хотим найти наибольшую сумму чисел в клетках, через которые прошла черепашка (включая начальную и конечную клетки). Найдите маршрут с наибольшей суммой чисел и выведите это значение.
Timka

Timka

Чтобы найти маршрут с максимальной стоимостью, мы можем использовать динамическое программирование. Давайте разберемся пошагово, чтобы все было понятно.

1. Создадим двумерный массив размером N×M для хранения значений каждой клетки таблицы и их суммы пути.
2. Инициализируем первую клетку в верхнем левом углу массива с тем же значением, что и в таблице.
3. Вычислим значения для остальных клеток в массиве, двигаясь по строкам и столбцам. Для каждой клетки (i, j) мы можем переместиться только из клетки сверху (i-1, j) или слева (i, j-1). Мы выберем путь с наибольшей стоимостью, добавим значение из текущей клетки и обновим значение массива (i, j).
4. По окончании итераций все значения массива будут содержать наибольшую сумму чисел пути от начальной клетки до текущей клетки.
5. Найдем и вернем значение в правом нижнем углу массива, которое будет представлять собой сумму чисел на пути с наибольшей стоимостью.

Вот Python-код, реализующий этот алгоритм:

python
def find_max_route(matrix):
n = len(matrix)
m = len(matrix[0])

# Создаем массив сумм пути
dp = [[0] * m for _ in range(n)]

# Инициализация первой клетки
dp[0][0] = matrix[0][0]

# Вычисляем значения для остальных клеток
for i in range(1, n):
dp[i][0] = dp[i-1][0] + matrix[i][0]

for j in range(1, m):
dp[0][j] = dp[0][j-1] + matrix[0][j]

for i in range(1, n):
for j in range(1, m):
dp[i][j] = max(dp[i-1][j], dp[i][j-1]) + matrix[i][j]

# Возвращаем значение в правом нижнем углу массива
return dp[n-1][m-1]

# Пример использования:
matrix = [[1, 3, 2],
[4, 5, 6],
[7, 8, 9]]

max_route_sum = find_max_route(matrix)
print("Максимальная сумма чисел в маршруте:", max_route_sum)


В качестве примера использования мы создаем прямоугольную таблицу размером 3×3 с числами. Вызываем функцию `find_max_route`, передавая эту таблицу, и выводим результат.

Если вам нужно найти маршрут для другой таблицы, просто измените значения в `matrix`. Убедитесь, что размер таблицы соответствует инициализации `n` и `m` в коде.

Надеюсь, что объяснение и решение данной задачи были понятными и полезными! Если возникнут еще вопросы, не стесняйтесь задавать.
Знаешь ответ?
Задать вопрос
Привет!
hello