Задание 18 ЕГЭ по информатике: наибольшая и наименьшая сумма Робота

Задание 18 ЕГЭ по информатике проверяет умение обрабатывать целочисленные данные в электронных таблицах: Робот идёт по клеткам квадрата вправо и вниз, собирает монеты, и нужно найти наибольшую и наименьшую возможную сумму. Решают его в редакторе электронных таблиц: рядом с полем строят таблицу накопленных сумм, где каждая клетка считается формулой из соседей слева и сверху.

Как решать

Откройте файл и скопируйте поле с числами на свободное место листа. Пусть поле занимает A1:J10, а таблица максимумов начинается с A21. В каждой её клетке будет стоять наибольшая сумма, с которой Робот может прийти в соответствующую клетку поля.

Заполните таблицу формулами. В A21 поставьте =A1. В первой строке Робот приходит только слева: в B21 формула =A21+B1, её копируют вправо. В первом столбце он приходит только сверху: в A22 формула =A21+A2, её копируют вниз. В остальных клетках =МАКС(B21;A22)+B2 для B22, и эту формулу копируют на всю оставшуюся область. Таблицу минимумов строят так же, начиная, например, с A41, с функцией МИН вместо МАКС.

Стены меняют формулы. Если слева от клетки стоит стена, Робот не может прийти слева, и в формуле остаётся только сосед сверху: для клетки C2 со стеной между B2 и C2 вместо =МАКС(C21;B22)+C2 пишут =C21+C2. Если стена над клеткой, остаётся только сосед слева. Проверьте все клетки, соседние со стенами, и поправьте формулы вручную в обеих таблицах.

В демоверсии 2027 года Робот может остановиться в любой клетке, которая справа и снизу закрыта стенами, внешними или внутренними; правая нижняя клетка — одна из них. Найдите все такие клетки, возьмите наибольшее значение в таблице максимумов и наименьшее значение в таблице минимумов.

Для проверки поле можно переписать в Python списком строк, а стены — множествами клеток, из которых нельзя пройти вправо или вниз. Программа заполняет таблицы тем же правилом, что и формулы.

Примеры с решением

Пример 1

Квадрат разлинован на 5 × 5 клеток. Исполнитель Робот перемещается по клеткам командами вправо и вниз: по команде вправо он переходит в соседнюю правую клетку, по команде вниз — в соседнюю нижнюю. Квадрат ограничен внешними стенами, между клетками бывают внутренние стены, сквозь стену Робот пройти не может. В каждой клетке лежит монета достоинством от 1 до 30. Посетив клетку, Робот забирает монету, это относится и к начальной, и к конечной клетке.

Робот идёт из левой верхней клетки A1 в правую нижнюю клетку E5. Определите максимальную и минимальную денежные суммы, которые он может собрать. В ответе укажите два числа: сначала максимальную сумму, затем минимальную.

Поле (строки 1–5, столбцы A–E):

     A   B   C   D   E
1   12   7  25   3  18
2    4  30   9  21   6
3   17   2  14   8  27
4   23  11   5  19  10
5    8  26  15   4  13

Внутренние стены проходят по правой границе клеток B2 и B3 (из B2 нельзя пройти в C2, из B3 — в C3) и по нижней границе клетки D3 (из D3 нельзя пройти в D4).

Проверка ответа на Python

grid = [
    [12, 7, 25, 3, 18],
    [4, 30, 9, 21, 6],
    [17, 2, 14, 8, 27],
    [23, 11, 5, 19, 10],
    [8, 26, 15, 4, 13],
]
# Стены: из клетки (строка, столбец) нельзя пройти вправо / вниз. Нумерация с нуля.
no_right = {(1, 1), (2, 1)}     # правые границы клеток B2 и B3
no_down = {(2, 3)}              # нижняя граница клетки D3
n = len(grid)
hi = [[None] * n for _ in range(n)]
lo = [[None] * n for _ in range(n)]
for r in range(n):
    for c in range(n):
        if r == 0 and c == 0:
            hi[r][c] = lo[r][c] = grid[r][c]
            continue
        prev = []
        if c > 0 and (r, c - 1) not in no_right and hi[r][c - 1] is not None:
            prev.append((hi[r][c - 1], lo[r][c - 1]))
        if r > 0 and (r - 1, c) not in no_down and hi[r - 1][c] is not None:
            prev.append((hi[r - 1][c], lo[r - 1][c]))
        if prev:
            hi[r][c] = max(p[0] for p in prev) + grid[r][c]
            lo[r][c] = min(p[1] for p in prev) + grid[r][c]
print(hi[n - 1][n - 1], lo[n - 1][n - 1])

Ответ: 132 83

В клетки C2 и C3 Робот приходит только сверху, в клетку D4 — только слева, поэтому в этих клетках формула берёт одного соседа. В клетке E5 таблица максимумов даёт 132, таблица минимумов — 83. Наибольшую сумму даёт путь A1 → B1 → C1 → C2 → D2 → D3 → E3 → E4 → E5: 12 + 7 + 25 + 9 + 21 + 8 + 27 + 10 + 13 = 132. Наименьшую — путь A1 → A2 → A3 → B3 → B4 → C4 → C5 → D5 → E5: 12 + 4 + 17 + 2 + 11 + 5 + 15 + 4 + 13 = 83.

Пример 2

Квадрат разлинован на 6 × 6 клеток, правила движения Робота и сбора монет те же, что в примере 1. Робот начинает путь в клетке A1. В клетке, которая справа и снизу ограничена стенами, Робот не может продолжать движение, и накопленная сумма считается итоговой. Таких конечных клеток может быть несколько, правая нижняя клетка F6 — одна из них.

Определите максимальную и минимальную денежные суммы среди всех возможных итоговых сумм. В ответе укажите два числа: сначала максимальную сумму, затем минимальную.

Поле (строки 1–6, столбцы A–F):

     A   B   C   D   E   F
1   14   3  27   9  31   5
2   22  40   6  18   2  36
3    7  15  33   4  25  11
4   29   1  12  38   8  20
5    5  24  17  10  44   3
6   16   9  28   6  13  21

Внутренние стены: по правой границе клеток D1 и D2, по правой и нижней границам клетки C4, по нижней границе клетки F3.

Проверка ответа на Python

grid = [
    [14, 3, 27, 9, 31, 5],
    [22, 40, 6, 18, 2, 36],
    [7, 15, 33, 4, 25, 11],
    [29, 1, 12, 38, 8, 20],
    [5, 24, 17, 10, 44, 3],
    [16, 9, 28, 6, 13, 21],
]
# Стены (нумерация строк и столбцов с нуля): C4 закрыта справа и снизу, D1 и D2 — справа, F3 — снизу.
no_right = {(3, 2), (0, 3), (1, 3)}
no_down = {(3, 2), (2, 5)}
n = len(grid)
hi = [[None] * n for _ in range(n)]
lo = [[None] * n for _ in range(n)]
for r in range(n):
    for c in range(n):
        if r == 0 and c == 0:
            hi[r][c] = lo[r][c] = grid[r][c]
            continue
        prev = []
        if c > 0 and (r, c - 1) not in no_right and hi[r][c - 1] is not None:
            prev.append((hi[r][c - 1], lo[r][c - 1]))
        if r > 0 and (r - 1, c) not in no_down and hi[r - 1][c] is not None:
            prev.append((hi[r - 1][c], lo[r - 1][c]))
        if prev:
            hi[r][c] = max(p[0] for p in prev) + grid[r][c]
            lo[r][c] = min(p[1] for p in prev) + grid[r][c]


def final(r, c):
    """Конечная клетка: справа и снизу стена (внешняя или внутренняя)."""
    closed_right = c == n - 1 or (r, c) in no_right
    closed_down = r == n - 1 or (r, c) in no_down
    return hi[r][c] is not None and closed_right and closed_down


ends = [(r, c) for r in range(n) for c in range(n) if final(r, c)]
print(max(hi[r][c] for r, c in ends), min(lo[r][c] for r, c in ends))

Ответ: 254 71

Конечных клеток три: C4 (стены справа и снизу), F3 (справа внешняя стена, снизу внутренняя) и F6. В клетки E1, F1, E2 и F2 Робот попасть не может: из D1 и D2 вправо не пройти, а в E2 сверху можно прийти только из недоступной E1. В таблице максимумов в конечных клетках стоят 136, 164 и 254, в таблице минимумов — 71, 108 и 149. Максимальная итоговая сумма — 254, минимальная — 71: её даёт остановка в C4.

Типичные ошибки

Потренироваться на тренажёре

Частые вопросы

Как в файле к заданию 18 обозначены стены?

В демоверсии внутренние и внешние стены обозначены утолщёнными линиями на границах клеток электронной таблицы. Перед тем как писать формулы, найдите все такие линии внутри поля.

В какой программе открывать файл?

Файл к заданию 18 в демоверсии 2027 года дан в формате .ods, его открывает LibreOffice Calc. О форматах файлов на экзамене есть отдельная страница.

Можно ли решить задание 18 программой?

Можно, если переписать поле и стены в программу, как в примерах. Стены в программу приходится переносить вручную, а в электронной таблице они видны прямо на поле.

Официальные материалы

Другие задания

Все задания и структура экзамена — на странице ЕГЭ по информатике. Соседние разборы: задание 17 и задание 19.

Описание задания сверено 28 сентября 2026 года со спецификацией 2027 года (документы 2027 года). Примеры составлены нами по структуре демоверсии, каждое решение запущено, и напечатанный им ответ совпадает с ответом на странице. Кодолимп не связан с разработчиками экзамена. Заметили неточность — напишите нам.