Квадрат разлинован на N×N клеток (1 < N < 17). Исполнитель Робот может перемещаться по клеткам, выполняя за одно перемещение одну из двух команд: вправо или вниз. По команде вправо Робот перемещается в соседнюю правую клетку, по команде вниз – в соседнюю нижнюю. При попытке выхода за границу квадрата Робот разрушается. Перед каждым запуском Робота в каждой клетке квадрата лежит монета достоинством от 1 до 100. Посетив клетку, Робот забирает монету с собой; это также относится к начальной и конечной клетке маршрута Робота. Определите максимальную и минимальную денежную сумму, которую может собрать Робот, пройдя из левой верхней клетки в правую нижнюю. В ответе укажите два числа – сначала максимальную сумму, затем минимальную. Исходные данные представляют собой электронную таблицу размером N×N, каждая ячейка которой соответствует клетке квадрата.
Для решения данной задачи можно использовать алгоритм динамического программирования.
1. Создадим два двумерных массива: max_sum и min_sum, размерностью (N+1)x(N+1), где N - размер квадрата.
2. Заполним массивы начальными значениями. В каждой клетке (i, j) max_sum[i][j] и min_sum[i][j] будет храниться максимальная и минимальная сумма монет, которую можно собрать, пройдя от верхней левой клетки до клетки (i, j).
3. Начинаем заполнять массивы построчно.
- В клетке (1, 1) max_sum[1][1] = min_sum[1][1] = значение этой клетки.
- Заполняем первую строку и первый столбец: max_sum[1][j] = max_sum[1][j-1] + значение клетки (1, j), min_sum[1][j] = min_sum[1][j-1] + значение клетки (1, j); max_sum[i][1] = max_sum[i-1][1] + значение клетки (i, 1), min_sum[i][1] = min_sum[i-1][1] + значение клетки (i, 1), где i и j больше 1 и меньше или равны N.
- Для каждой оставшейся клетки (i, j) вычисляем максимальную и минимальную суммы: max_sum[i][j] = max(max_sum[i-1][j], max_sum[i][j-1]) + значение клетки (i, j), min_sum[i][j] = min(min_sum[i-1][j], min_sum[i][j-1]) + значение клетки (i, j).
4. В конечной клетке (N, N) будет находиться максимальная и минимальная сумма, которую можно собрать.
5. В ответе укажите два числа: max_sum[N][N] и min_sum[N][N].
Пример решения задачи:
Пусть дан следующий квадрат размером 4x4:
1 5 9 11
3 8 2 5
4 1 7 3
2 4 6 7
1. Создаем двумерные массивы max_sum и min_sum размером 5x5:
Держи на языке программирования python, может поймешь принцип работы, если не понял обращайся.