Квадрат разлинован на клеток (1 < N < 20). Исполнитель Робот может перемещаться по клеткам, выполняя за одно перемещение одну из двух команд: вправо или вниз. По команде вправо Робот перемещается на любое количество клеток вправо, по команде вниз – на любое количество клеток вниз. При попытке пересечь границы (внутренние, обозначенные жирными линиями, или границы квадрата) Робот разрушается. В каждой клетке квадрата указана плата за посещение в размере от 1 до 100. Остановившись в клетке, Робот платит за её посещение; это также относится к начальной и конечной точке маршрута Робота. Определите минимальную и максимальную денежную сумму, которую заплатит Робот, пройдя из левой верхней клетки в правую нижнюю.
В ответе укажите два числа через пробел – сначала минимальную сумму, затем максимальную. Исходные данные для Робота записаны в файле в виде прямоугольной таблицы, каждая ячейка которой соответствует клетке квадрата.
Нам дано поле 16 на 16, создадим еще одно поле такого же размера ниже (ячейки ).
Сначала решим задачу как будто в ней нет стен. В стартовой ячейке запишем значение из соответствующей ячейки
. В остальные ячейки первой строки Робот может попасть из любой ячейки левее, а в остальные ячейки первого столбца Робот может попасть из любой ячейки выше.
Для ячейки напишем следующу формулу:
=МИН($A20:A20)+B1
В этой формуле закреплён столбец, откуда Робот может начать перемещаться по полю, чтобы формулу можно было растянуть вправо, изменяя только последнюю ячейку, откуда Робот мог попасть в текущую.
Аналогично напишем формулу для ячейки для первого столбца, но для растяжения формулы вниз уже закрепим номер строки стартовой ячейки:
=МИН(A$20:A20)+A2
Теперь напишем формулу для ячейки , которая является внутренней ячейкой поля. В неё Робот может попасть из любой ячейки выше или левее. Значит нужно в формуле выделить два диапазона: от самой левой ячейки до последней в строке перед ячейкой и от самой верхней ячейки до последней в столбце перед ячейкой.
Тогда напишем формулу для ячейки , закрепив для растяжения по строкам столбец первой ячейки строки и закрепив для растяжения по столбцам номер первой ячейки столбца:
=МИН($A21:A21;B$20:B20)+B2
Растянем эту формулу по всему полю. Теперь, чтобы учесть стены, скопируем исходную таблицу и перенесём форматирование с помощью специальной вставки. После этого нужно изменить формулы в ячейках, которые находятся справа от стены или ниже стены. Робот в таком случае не сможет прийти из ячеек в столбце, которые будут выше стены, или из ячеек в строке, которые будут левее стены.
Для ячеек, которые находятся вплотную к стене, нужно удалить диапазон, откуда Робот не может попасть. Например для ячейки будет следующая формула:
=МИН($A25:F25)+G6
А ячейки, которые находятся ниже/правее ячейки, стоящей к стене вплотную, нужно поменять начальный столбец и/или строку. Например для ячейки будет следующая формула:
=МИН($A26:F26;G$25:G25)+G7
Получим следующую таблицу (ячейки, формулы которых требовалось изменить, выделены соответствующими цветами):
Теперь, когда все формулы скорректированы с учётом стен, в ячейке находится минимальная сумма, которую можно брать в ответ.
Для того, чтобы найти максимальную сумму необходимо заменить во всех формулах МИН на МАКС.