Задание 18 ЕГЭ по информатике: робот-сборщик монет — алгоритм решения
Подтемы
- Задания для подготовки66 задач
Что проверяет задание
Задание 18 проверяет умение работать с формализованным описанием исполнителя и переносить логику его движения на язык вычислений. По сути это классическая задача поиска оптимального пути в прямоугольной сетке, но упакованная в условие про Робота и монеты. Проверяются три навыка одновременно:
- понимание ограничений движения исполнителя (только «вправо» и «вниз», разрушение при выходе за границу);
- умение построить рекуррентное соотношение для максимума и минимума суммы на пути;
- умение реализовать это соотношение в электронной таблице или программе, потому что вручную обработать сетку размером до нереально.
Задание относится к «файловым» — данные даются в приложенном документе (таблица с числами), и без табличного процессора или скрипта его не решить за отведённое время.
Как выглядит формулировка и сколько баллов
Стандартная формулировка: квадрат разлинован на клеток, где . В каждой клетке лежит монета достоинством от 1 до 100. Робот стартует в левой верхней клетке, движется только вправо или вниз и финиширует в правой нижней клетке, собирая монеты со всех посещённых клеток, включая начальную и конечную. Нужно найти максимальную и минимальную сумму, которую может собрать Робот.
Особенности оформления ответа:
- ответ — два числа, записанные подряд без пробелов и разделителей;
- порядок фиксирован: сначала максимальная сумма, затем минимальная;
- данные находятся в прикреплённом файле (таблица), а не в тексте условия;
- задание оценивается в 1 первичный балл, засчитывается только точное совпадение ответа целиком (обе цифры сразу).
Что нужно знать
- Число клеток в квадрате — , а число шагов Робота от старта до финиша всегда равно , число посещённых клеток — .
- Число различных маршрутов из левого верхнего угла в правый нижний равно — это биномиальный коэффициент, который растёт очень быстро (уже при счёт идёт на сотни миллионов маршрутов), поэтому перебор всех путей вручную или простым циклом невозможен.
- Основная идея — принцип оптимальности динамического программирования: лучший (или худший) путь до клетки строится только из лучшего пути до соседа сверху или соседа слева .
- Рекуррентные формулы для максимальной суммы и минимальной : где — значение монеты в клетке .
- Граничные условия: первая строка и первый столбец имеют только один возможный путь — накопительную сумму:
- Ответ — это и , записанные подряд.
- Пригодятся базовые навыки табличного процессора: относительные и абсолютные ссылки (знак
$), функцииМАКС()/MAX()иМИН()/MIN(), автозаполнение формул протягиванием.
Методы решения
1. Динамическое программирование «по клеткам» (основной метод). Строится не одна, а две вспомогательные таблицы того же размера — для максимума и для минимума. Мини-пример: пусть в клетке лежит монета , а до соседей уже посчитано и . Тогда .
2. Работа в электронной таблице. В отдельный лист копируется исходная сетка, рядом строятся две таблицы-двойники. В верхнюю левую ячейку каждой копируется значение из исходной таблицы, в первую строку и столбец — накопительные суммы, а во все остальные ячейки протягивается формула вида =A1+МАКС(B0;A0) (с соответствующими абсолютными и относительными ссылками). Итог считывается из правого нижнего угла каждой таблицы.
3. Программный способ. Если удобнее писать код (Python, Pascal, школьный алгоритмический язык), матрица считывается из файла в двумерный массив, затем заполняются два массива dp_max и dp_min по тем же рекуррентным формулам, ответ — значения в последней ячейке обоих массивов.
4. Комбинаторная проверка целесообразности метода. Перед решением полезно прикинуть число маршрутов по формуле . Например, для число маршрутов — перебрать можно вручную. Для получается — перебор исключён, только динамическое программирование.
5. Ручная проверка на маленьких сетках. Перед тем как доверять формулам в большой таблице, стоит вручную решить маленький пример (например ) и сравнить результат с полным перебором путей — это позволяет обнаружить ошибку в формуле ещё до применения её к большому файлу.
Алгоритм решения по шагам
- Открыть приложенный файл и определить размер квадрата (число строк или столбцов таблицы).
- Скопировать исходную таблицу монет в два места на листе — будущие таблицы и .
- В верхнюю левую ячейку обеих копий вписать значение .
- Заполнить первую строку и первый столбец накопительными суммами (единственный путь).
- Во все остальные ячейки таблицы ввести формулу и протянуть её на весь диапазон.
- Аналогично заполнить таблицу , заменив функцию максимума на минимум.
- Считать значения из правых нижних ячеек обеих таблиц — это максимальная и минимальная суммы.
- Записать ответ как две цифры подряд: сначала максимум, затем минимум, без пробелов и знаков.
Разбор примеров
Чтобы увидеть механику целиком, разберём компактную сетку — та же логика применяется и к настоящим файлам размером до , просто в них таблицы крупнее и заполняются протягиванием формул.
Пусть таблица монет такая:
Шаг 1. Таблица максимумов. Первая строка и столбец — накопительные суммы: , , ; , .
Далее по формуле : ; ; ; .
Максимальная сумма — 23.
Шаг 2. Таблица минимумов. Первая строка и столбец совпадают с предыдущими (путь единственный): 3, 10, 12 и 8, 12.
; ; ; .
Минимальная сумма — 18. Итоговый ответ для этой сетки: 2318.
Проверка полным перебором (для путей всего 6) подтверждает результат: путь «вправо-вправо-вниз-вниз» даёт (максимум), а путь «вниз-вправо-вниз-вправо» даёт (минимум) — формулы работают верно.
В реальных заданиях banка (условно назовём их Пример 1, Пример 2 и Пример 3) сетка гораздо больше — квадрат до , взятый из прикреплённого файла. Ручной перебор здесь исключён из-за миллионов маршрутов, но алгоритм абсолютно тот же: две вспомогательные таблицы, формулы максимума и минимума, протянутые на весь диапазон. Применяя описанные шаги к соответствующим файлам, для Примера 1 получаем итоговый ответ 1204502, для Примера 2 — 1212392, для Примера 3 — 1496782. В каждом случае числа получены одинаковым способом: заполнением таблиц и по всей сетке и считыванием значений из правого нижнего угла — просто масштаб сетки не позволяет привести здесь пошаговое заполнение всех 256 ячеек, поэтому расчёт выполняется в табличном процессоре или программе, а не на бумаге.
Типичные ошибки и ловушки
- Перепутан порядок чисел в ответе. Нужно писать сначала максимум, затем минимум — обратный порядок засчитывается как неверный ответ, даже если оба числа правильные.
- Неверные абсолютные и относительные ссылки в формуле. При протягивании формулы вправо и вниз легко «съехать» ссылкой на соседнюю клетку не в ту сторону — стоит сразу проверить формулу в нескольких соседних ячейках вручную.
- Ошибка в границах таблицы. Первую строку и первый столбец нельзя заполнять общей формулой с / от двух соседей — там путь единственный, и формула должна быть просто накопительной суммой.
- Путаница между максимумом и минимумом монет и суммой пути. Задание просит сумму по всему маршруту, а не самое дорогое или самое дешёвое отдельное значение клетки.
- Неверное определение размера . Если размер таблицы в файле определён неверно (например, включена лишняя строка заголовка), все дальнейшие вычисления окажутся смещены.
- Округление или потеря числа при копировании ответа. Итоговое число нужно переносить в бланк ответа целиком, без пробелов между максимумом и минимумом.
Как готовиться
- Сначала отработать рекуррентные формулы на маленьких сетках (–) с ручной проверкой полным перебором маршрутов — это закрепляет понимание принципа динамического программирования.
- Потренироваться строить в табличном процессоре сразу две вспомогательные таблицы (для максимума и минимума) на одном листе, чтобы формулы протягивания не пересекались.
- Освоить быстрое определение размера таблицы в открытом файле — не пересчитывать строки вручную, а использовать выделение диапазона.
- Прорешать несколько вариантов из открытого банка заданий, каждый раз проверяя порядок чисел в ответе (максимум первым).
- При наличии навыков программирования продублировать решение скриптом — это даёт быстрый способ проверить результат, полученный в таблице, и снижает риск случайной ошибки в формуле.
- Обязательно засекать время выполнения задания на тренировках: цель — уверенно построить обе таблицы и получить ответ за 3–5 минут, не тратя лишнее время на пересчёт вручную.
Частые вопросы
Почему нельзя просто перебрать все пути Робота вручную?
Число маршрутов растёт как биномиальный коэффициент и уже при N около 10 переваливает за десятки тысяч, а при N=16 достигает сотен миллионов — перебор нереален без специальных алгоритмов.
В каком порядке записывать ответ — максимум или минимум первым?
Всегда сначала максимальная сумма, затем минимальная, оба числа пишутся подряд без пробелов и знаков разделения.
Нужно ли строить одну таблицу или две?
Удобнее строить две отдельные вспомогательные таблицы того же размера — одну с формулой максимума, другую с формулой минимума, иначе легко перепутать формулы при протягивании.
Как заполнять первую строку и первый столбец таблицы?
Там существует только один возможный путь, поэтому значения — это простая накопительная сумма монет вдоль строки или столбца, без применения функций максимума или минимума.
Можно ли решить задание без электронных таблиц, просто в уме?
Для маленьких сеток (3x3, 4x4) можно решить вручную, применяя рекуррентные формулы построчно, но для реальных файлов размером до 16x16 нужен табличный процессор или программа.
Что делать, если результат в таблице кажется слишком большим или маленьким?
Стоит проверить формулы на нескольких соседних ячейках вручную и сравнить с прямым подсчётом простого маршрута — это быстро выявляет ошибку в ссылках.
Сколько баллов дают за это задание и что считается верным ответом?
Задание оценивается в 1 первичный балл, засчитывается только полное совпадение обоих чисел в правильном порядке, частичный ответ не оценивается.