ЕГЭ по информатике · задание 18

Робот на поле со стенами: максимум и минимум

Робот идёт вправо и вниз по полю с монетами и стенами. Нужно найти наибольшую и наименьшую сумму, которую он может собрать к концу маршрута. К каждому варианту — файл .xlsx, стены отмечены толстыми границами.

Идея динамики

  • Сумма в клетке = монета + лучшая сумма из соседа слева или сверху.
  • Стена между клетками — соседа не учитываем.
  • Ответ — по конечным клеткам (стена справа и снизу).

В Excel

  • Копия поля справа, формула =МАКС(слева; сверху) + монета.
  • У стен — ссылка только на доступного соседа.
  • Минимум — вторая копия с МИН.

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

  • Не учесть конечные клетки внутри поля — только правый нижний угол.
  • Протянуть формулу «сквозь» стену.
  • Забыть монету в начальной клетке.

Разобранные варианты

Сначала реши сам в Excel или на Python, потом открой разбор.

Вариант 1

поле 10×10 · концов 6

Квадрат разлинован на N × N клеток (1 < N < 30). Исполнитель Робот может перемещаться по клеткам, выполняя за одно перемещение одну из двух команд: вправо или вниз. По команде вправо Робот перемещается в соседнюю правую клетку, по команде вниз — в соседнюю нижнюю. Квадрат ограничен внешними стенами. Между соседними клетками квадрата также могут быть внутренние стены. Сквозь стену Робот пройти не может. Перед каждым запуском Робота в каждой клетке квадрата лежит монета достоинством от 1 до 100. Посетив клетку, Робот забирает монету с собой; это также относится к начальной и конечной клеткам маршрута. В «угловых» клетках поля — тех, которые справа и снизу ограничены стенами, Робот не может продолжать движение, поэтому накопленная сумма считается итоговой. Таких конечных клеток на поле может быть несколько, включая правую нижнюю клетку поля. Определите максимальную и минимальную денежные суммы среди всех возможных итоговых сумм, которые может собрать Робот, пройдя из левой верхней клетки в конечную клетку маршрута. В ответе укажите два числа — сначала максимальную сумму, затем минимальную. Исходные данные — электронная таблица N × N, каждая ячейка которой соответствует клетке квадрата. Внутренние и внешние стены обозначены утолщёнными линиями.

Файл к варианту: Ege18_v1.xlsx (поле 10×10).

Посмотреть поле на странице
48162376546166707348
94781838594930204124
185982153365869677
2822787613271002021
7745849991675507861
77275122863526833952
2652282881430294187
1923146033321243883
4971867356672445220
44688421305911352684

Разбор

Идея. Для каждой клетки считаем наибольшую (и отдельно наименьшую) сумму, с которой Робот может в неё прийти. В клетку можно прийти только слева или сверху, если там нет стены. Поэтому сумма в клетке = монета + max (или min) из сумм соседних клеток слева и сверху.

В электронной таблице. Справа от поля строим копию: в первой клетке — значение монеты, в первой строке =ячейка_слева + монета, в первом столбце =ячейка_сверху + монета, в остальных =МАКС(слева; сверху) + монета. Там, где стена отделяет клетку от соседа, формулу правим вручную: берём только доступного соседа. Затем копию повторяем с МИН.

Конечные клетки (стена справа и снизу, достижимы из начала): F2, F5, F8, H8, J8, F10. Ответ — максимум и минимум посчитанных сумм по этим клеткам: 912 и 251.

Ответ: 912 251

Решение на Python. Положите файл рядом с программой (нужна openpyxl). Стены программа находит по стилю границы ячеек: утолщённая граница — 'medium'.

from openpyxl import load_workbook

ws = load_workbook('Ege18_v1.xlsx').active
n = ws.max_row
coin = [[ws.cell(r + 1, c + 1).value for c in range(n)] for r in range(n)]

def wall_right(r, c):   # утолщённая граница справа у клетки или слева у соседней
    return c == n - 1 or ws.cell(r + 1, c + 1).border.right.style == 'medium' \
        or ws.cell(r + 1, c + 2).border.left.style == 'medium'

def wall_down(r, c):
    return r == n - 1 or ws.cell(r + 1, c + 1).border.bottom.style == 'medium' \
        or ws.cell(r + 2, c + 1).border.top.style == 'medium'

# mx[r][c], mn[r][c] — наибольшая и наименьшая сумма на пути из левого верхнего угла в клетку (r, c)
mx = [[None] * n for _ in range(n)]
mn = [[None] * n for _ in range(n)]
for r in range(n):
    for c in range(n):
        if r == 0 and c == 0:
            mx[r][c] = mn[r][c] = coin[0][0]
            continue
        prev = []
        if c > 0 and not wall_right(r, c - 1) and mx[r][c - 1] is not None:
            prev.append((mx[r][c - 1], mn[r][c - 1]))
        if r > 0 and not wall_down(r - 1, c) and mx[r - 1][c] is not None:
            prev.append((mx[r - 1][c], mn[r - 1][c]))
        if prev:
            mx[r][c] = max(p[0] for p in prev) + coin[r][c]
            mn[r][c] = min(p[1] for p in prev) + coin[r][c]

# конечные клетки: достижимы, а справа и снизу — стены
ends = [(r, c) for r in range(n) for c in range(n) if mx[r][c] is not None and wall_right(r, c) and wall_down(r, c)]
print(max(mx[r][c] for r, c in ends), min(mn[r][c] for r, c in ends))

Вариант 2

поле 11×11 · концов 3

Квадрат разлинован на N × N клеток (1 < N < 30). Исполнитель Робот может перемещаться по клеткам, выполняя за одно перемещение одну из двух команд: вправо или вниз. По команде вправо Робот перемещается в соседнюю правую клетку, по команде вниз — в соседнюю нижнюю. Квадрат ограничен внешними стенами. Между соседними клетками квадрата также могут быть внутренние стены. Сквозь стену Робот пройти не может. Перед каждым запуском Робота в каждой клетке квадрата лежит монета достоинством от 1 до 100. Посетив клетку, Робот забирает монету с собой; это также относится к начальной и конечной клеткам маршрута. В «угловых» клетках поля — тех, которые справа и снизу ограничены стенами, Робот не может продолжать движение, поэтому накопленная сумма считается итоговой. Таких конечных клеток на поле может быть несколько, включая правую нижнюю клетку поля. Определите максимальную и минимальную денежные суммы среди всех возможных итоговых сумм, которые может собрать Робот, пройдя из левой верхней клетки в конечную клетку маршрута. В ответе укажите два числа — сначала максимальную сумму, затем минимальную. Исходные данные — электронная таблица N × N, каждая ячейка которой соответствует клетке квадрата. Внутренние и внешние стены обозначены утолщёнными линиями.

Файл к варианту: Ege18_v2.xlsx (поле 11×11).

Посмотреть поле на странице
2745158142943594215478
25938178604866668762
198825787201006214597
3137252884225999748668
5577789887983100435135
5314387425871095634062
21889289066602363931
897477933543371573713
375581742535280100835
7419333239837645769810
5834173090899146646225

Разбор

Идея. Для каждой клетки считаем наибольшую (и отдельно наименьшую) сумму, с которой Робот может в неё прийти. В клетку можно прийти только слева или сверху, если там нет стены. Поэтому сумма в клетке = монета + max (или min) из сумм соседних клеток слева и сверху.

В электронной таблице. Справа от поля строим копию: в первой клетке — значение монеты, в первой строке =ячейка_слева + монета, в первом столбце =ячейка_сверху + монета, в остальных =МАКС(слева; сверху) + монета. Там, где стена отделяет клетку от соседа, формулу правим вручную: берём только доступного соседа. Затем копию повторяем с МИН.

Конечные клетки (стена справа и снизу, достижимы из начала): E5, G5, K11. Ответ — максимум и минимум посчитанных сумм по этим клеткам: 1255 и 364.

Ответ: 1255 364

Решение на Python. Положите файл рядом с программой (нужна openpyxl). Стены программа находит по стилю границы ячеек: утолщённая граница — 'medium'.

from openpyxl import load_workbook

ws = load_workbook('Ege18_v2.xlsx').active
n = ws.max_row
coin = [[ws.cell(r + 1, c + 1).value for c in range(n)] for r in range(n)]

def wall_right(r, c):   # утолщённая граница справа у клетки или слева у соседней
    return c == n - 1 or ws.cell(r + 1, c + 1).border.right.style == 'medium' \
        or ws.cell(r + 1, c + 2).border.left.style == 'medium'

def wall_down(r, c):
    return r == n - 1 or ws.cell(r + 1, c + 1).border.bottom.style == 'medium' \
        or ws.cell(r + 2, c + 1).border.top.style == 'medium'

# mx[r][c], mn[r][c] — наибольшая и наименьшая сумма на пути из левого верхнего угла в клетку (r, c)
mx = [[None] * n for _ in range(n)]
mn = [[None] * n for _ in range(n)]
for r in range(n):
    for c in range(n):
        if r == 0 and c == 0:
            mx[r][c] = mn[r][c] = coin[0][0]
            continue
        prev = []
        if c > 0 and not wall_right(r, c - 1) and mx[r][c - 1] is not None:
            prev.append((mx[r][c - 1], mn[r][c - 1]))
        if r > 0 and not wall_down(r - 1, c) and mx[r - 1][c] is not None:
            prev.append((mx[r - 1][c], mn[r - 1][c]))
        if prev:
            mx[r][c] = max(p[0] for p in prev) + coin[r][c]
            mn[r][c] = min(p[1] for p in prev) + coin[r][c]

# конечные клетки: достижимы, а справа и снизу — стены
ends = [(r, c) for r in range(n) for c in range(n) if mx[r][c] is not None and wall_right(r, c) and wall_down(r, c)]
print(max(mx[r][c] for r, c in ends), min(mn[r][c] for r, c in ends))

Вариант 3

поле 12×12 · концов 4

Квадрат разлинован на N × N клеток (1 < N < 30). Исполнитель Робот может перемещаться по клеткам, выполняя за одно перемещение одну из двух команд: вправо или вниз. По команде вправо Робот перемещается в соседнюю правую клетку, по команде вниз — в соседнюю нижнюю. Квадрат ограничен внешними стенами. Между соседними клетками квадрата также могут быть внутренние стены. Сквозь стену Робот пройти не может. Перед каждым запуском Робота в каждой клетке квадрата лежит монета достоинством от 1 до 100. Посетив клетку, Робот забирает монету с собой; это также относится к начальной и конечной клеткам маршрута. В «угловых» клетках поля — тех, которые справа и снизу ограничены стенами, Робот не может продолжать движение, поэтому накопленная сумма считается итоговой. Таких конечных клеток на поле может быть несколько, включая правую нижнюю клетку поля. Определите максимальную и минимальную денежные суммы среди всех возможных итоговых сумм, которые может собрать Робот, пройдя из левой верхней клетки в конечную клетку маршрута. В ответе укажите два числа — сначала максимальную сумму, затем минимальную. Исходные данные — электронная таблица N × N, каждая ячейка которой соответствует клетке квадрата. Внутренние и внешние стены обозначены утолщёнными линиями.

Файл к варианту: Ege18_v3.xlsx (поле 12×12).

Посмотреть поле на странице
167155552694428897994132
372885149254798090887076
631604175374385179365
24843244693576896501476
9710043513869318851009986
143189621977315958213
25876959415420336089688
6363322173546511006410
7597794996265838442644
42284112293042504918710
469436348391649472712234
959314839671475623673339

Разбор

Идея. Для каждой клетки считаем наибольшую (и отдельно наименьшую) сумму, с которой Робот может в неё прийти. В клетку можно прийти только слева или сверху, если там нет стены. Поэтому сумма в клетке = монета + max (или min) из сумм соседних клеток слева и сверху.

В электронной таблице. Справа от поля строим копию: в первой клетке — значение монеты, в первой строке =ячейка_слева + монета, в первом столбце =ячейка_сверху + монета, в остальных =МАКС(слева; сверху) + монета. Там, где стена отделяет клетку от соседа, формулу правим вручную: берём только доступного соседа. Затем копию повторяем с МИН.

Конечные клетки (стена справа и снизу, достижимы из начала): J8, G10, G12, L12. Ответ — максимум и минимум посчитанных сумм по этим клеткам: 1364 и 474.

Ответ: 1364 474

Решение на Python. Положите файл рядом с программой (нужна openpyxl). Стены программа находит по стилю границы ячеек: утолщённая граница — 'medium'.

from openpyxl import load_workbook

ws = load_workbook('Ege18_v3.xlsx').active
n = ws.max_row
coin = [[ws.cell(r + 1, c + 1).value for c in range(n)] for r in range(n)]

def wall_right(r, c):   # утолщённая граница справа у клетки или слева у соседней
    return c == n - 1 or ws.cell(r + 1, c + 1).border.right.style == 'medium' \
        or ws.cell(r + 1, c + 2).border.left.style == 'medium'

def wall_down(r, c):
    return r == n - 1 or ws.cell(r + 1, c + 1).border.bottom.style == 'medium' \
        or ws.cell(r + 2, c + 1).border.top.style == 'medium'

# mx[r][c], mn[r][c] — наибольшая и наименьшая сумма на пути из левого верхнего угла в клетку (r, c)
mx = [[None] * n for _ in range(n)]
mn = [[None] * n for _ in range(n)]
for r in range(n):
    for c in range(n):
        if r == 0 and c == 0:
            mx[r][c] = mn[r][c] = coin[0][0]
            continue
        prev = []
        if c > 0 and not wall_right(r, c - 1) and mx[r][c - 1] is not None:
            prev.append((mx[r][c - 1], mn[r][c - 1]))
        if r > 0 and not wall_down(r - 1, c) and mx[r - 1][c] is not None:
            prev.append((mx[r - 1][c], mn[r - 1][c]))
        if prev:
            mx[r][c] = max(p[0] for p in prev) + coin[r][c]
            mn[r][c] = min(p[1] for p in prev) + coin[r][c]

# конечные клетки: достижимы, а справа и снизу — стены
ends = [(r, c) for r in range(n) for c in range(n) if mx[r][c] is not None and wall_right(r, c) and wall_down(r, c)]
print(max(mx[r][c] for r, c in ends), min(mn[r][c] for r, c in ends))

Вариант 4

поле 14×14 · концов 4

Квадрат разлинован на N × N клеток (1 < N < 30). Исполнитель Робот может перемещаться по клеткам, выполняя за одно перемещение одну из двух команд: вправо или вниз. По команде вправо Робот перемещается в соседнюю правую клетку, по команде вниз — в соседнюю нижнюю. Квадрат ограничен внешними стенами. Между соседними клетками квадрата также могут быть внутренние стены. Сквозь стену Робот пройти не может. Перед каждым запуском Робота в каждой клетке квадрата лежит монета достоинством от 1 до 100. Посетив клетку, Робот забирает монету с собой; это также относится к начальной и конечной клеткам маршрута. В «угловых» клетках поля — тех, которые справа и снизу ограничены стенами, Робот не может продолжать движение, поэтому накопленная сумма считается итоговой. Таких конечных клеток на поле может быть несколько, включая правую нижнюю клетку поля. Определите максимальную и минимальную денежные суммы среди всех возможных итоговых сумм, которые может собрать Робот, пройдя из левой верхней клетки в конечную клетку маршрута. В ответе укажите два числа — сначала максимальную сумму, затем минимальную. Исходные данные — электронная таблица N × N, каждая ячейка которой соответствует клетке квадрата. Внутренние и внешние стены обозначены утолщёнными линиями.

Файл к варианту: Ege18_v4.xlsx (поле 14×14).

Посмотреть поле на странице
53157521142615484917583350
8167104034331422644938996238
2383455611875557944524248
2010197248813372259041698375
135931739425333952655145311
5117183224898739825723778050
802795492942677036851380227
86322956650213603395161310
80271897964947294462449317
7443793603215872982135
64299581887662634713336424
7563529394909772417261027
214718644332399880854374960
5761607084369035304980803662

Разбор

Идея. Для каждой клетки считаем наибольшую (и отдельно наименьшую) сумму, с которой Робот может в неё прийти. В клетку можно прийти только слева или сверху, если там нет стены. Поэтому сумма в клетке = монета + max (или min) из сумм соседних клеток слева и сверху.

В электронной таблице. Справа от поля строим копию: в первой клетке — значение монеты, в первой строке =ячейка_слева + монета, в первом столбце =ячейка_сверху + монета, в остальных =МАКС(слева; сверху) + монета. Там, где стена отделяет клетку от соседа, формулу правим вручную: берём только доступного соседа. Затем копию повторяем с МИН.

Конечные клетки (стена справа и снизу, достижимы из начала): G6, H11, D14, N14. Ответ — максимум и минимум посчитанных сумм по этим клеткам: 1483 и 394.

Ответ: 1483 394

Решение на Python. Положите файл рядом с программой (нужна openpyxl). Стены программа находит по стилю границы ячеек: утолщённая граница — 'medium'.

from openpyxl import load_workbook

ws = load_workbook('Ege18_v4.xlsx').active
n = ws.max_row
coin = [[ws.cell(r + 1, c + 1).value for c in range(n)] for r in range(n)]

def wall_right(r, c):   # утолщённая граница справа у клетки или слева у соседней
    return c == n - 1 or ws.cell(r + 1, c + 1).border.right.style == 'medium' \
        or ws.cell(r + 1, c + 2).border.left.style == 'medium'

def wall_down(r, c):
    return r == n - 1 or ws.cell(r + 1, c + 1).border.bottom.style == 'medium' \
        or ws.cell(r + 2, c + 1).border.top.style == 'medium'

# mx[r][c], mn[r][c] — наибольшая и наименьшая сумма на пути из левого верхнего угла в клетку (r, c)
mx = [[None] * n for _ in range(n)]
mn = [[None] * n for _ in range(n)]
for r in range(n):
    for c in range(n):
        if r == 0 and c == 0:
            mx[r][c] = mn[r][c] = coin[0][0]
            continue
        prev = []
        if c > 0 and not wall_right(r, c - 1) and mx[r][c - 1] is not None:
            prev.append((mx[r][c - 1], mn[r][c - 1]))
        if r > 0 and not wall_down(r - 1, c) and mx[r - 1][c] is not None:
            prev.append((mx[r - 1][c], mn[r - 1][c]))
        if prev:
            mx[r][c] = max(p[0] for p in prev) + coin[r][c]
            mn[r][c] = min(p[1] for p in prev) + coin[r][c]

# конечные клетки: достижимы, а справа и снизу — стены
ends = [(r, c) for r in range(n) for c in range(n) if mx[r][c] is not None and wall_right(r, c) and wall_down(r, c)]
print(max(mx[r][c] for r, c in ends), min(mn[r][c] for r, c in ends))

Вариант 5

поле 15×15 · концов 3

Квадрат разлинован на N × N клеток (1 < N < 30). Исполнитель Робот может перемещаться по клеткам, выполняя за одно перемещение одну из двух команд: вправо или вниз. По команде вправо Робот перемещается в соседнюю правую клетку, по команде вниз — в соседнюю нижнюю. Квадрат ограничен внешними стенами. Между соседними клетками квадрата также могут быть внутренние стены. Сквозь стену Робот пройти не может. Перед каждым запуском Робота в каждой клетке квадрата лежит монета достоинством от 1 до 100. Посетив клетку, Робот забирает монету с собой; это также относится к начальной и конечной клеткам маршрута. В «угловых» клетках поля — тех, которые справа и снизу ограничены стенами, Робот не может продолжать движение, поэтому накопленная сумма считается итоговой. Таких конечных клеток на поле может быть несколько, включая правую нижнюю клетку поля. Определите максимальную и минимальную денежные суммы среди всех возможных итоговых сумм, которые может собрать Робот, пройдя из левой верхней клетки в конечную клетку маршрута. В ответе укажите два числа — сначала максимальную сумму, затем минимальную. Исходные данные — электронная таблица N × N, каждая ячейка которой соответствует клетке квадрата. Внутренние и внешние стены обозначены утолщёнными линиями.

Файл к варианту: Ege18_v5.xlsx (поле 15×15).

Посмотреть поле на странице
32964091839581881978851232
95571353783577160614623954448
95928398221057965079228884460
339792984564655853210025955825
123334765179177541812280311018
939091897549572684114883162761
49748563148846859141885504266
55726124413047801443891991525
1831381123274136983888718315
828659444202261781556775683
10303079568334473653784594074
466077480392053314227657523
3879844995325402027643357581
8486547516143646789253841110048
3797681998941607455287094384

Разбор

Идея. Для каждой клетки считаем наибольшую (и отдельно наименьшую) сумму, с которой Робот может в неё прийти. В клетку можно прийти только слева или сверху, если там нет стены. Поэтому сумма в клетке = монета + max (или min) из сумм соседних клеток слева и сверху.

В электронной таблице. Справа от поля строим копию: в первой клетке — значение монеты, в первой строке =ячейка_слева + монета, в первом столбце =ячейка_сверху + монета, в остальных =МАКС(слева; сверху) + монета. Там, где стена отделяет клетку от соседа, формулу правим вручную: берём только доступного соседа. Затем копию повторяем с МИН.

Конечные клетки (стена справа и снизу, достижимы из начала): J3, O13, O15. Ответ — максимум и минимум посчитанных сумм по этим клеткам: 2006 и 537.

Ответ: 2006 537

Решение на Python. Положите файл рядом с программой (нужна openpyxl). Стены программа находит по стилю границы ячеек: утолщённая граница — 'medium'.

from openpyxl import load_workbook

ws = load_workbook('Ege18_v5.xlsx').active
n = ws.max_row
coin = [[ws.cell(r + 1, c + 1).value for c in range(n)] for r in range(n)]

def wall_right(r, c):   # утолщённая граница справа у клетки или слева у соседней
    return c == n - 1 or ws.cell(r + 1, c + 1).border.right.style == 'medium' \
        or ws.cell(r + 1, c + 2).border.left.style == 'medium'

def wall_down(r, c):
    return r == n - 1 or ws.cell(r + 1, c + 1).border.bottom.style == 'medium' \
        or ws.cell(r + 2, c + 1).border.top.style == 'medium'

# mx[r][c], mn[r][c] — наибольшая и наименьшая сумма на пути из левого верхнего угла в клетку (r, c)
mx = [[None] * n for _ in range(n)]
mn = [[None] * n for _ in range(n)]
for r in range(n):
    for c in range(n):
        if r == 0 and c == 0:
            mx[r][c] = mn[r][c] = coin[0][0]
            continue
        prev = []
        if c > 0 and not wall_right(r, c - 1) and mx[r][c - 1] is not None:
            prev.append((mx[r][c - 1], mn[r][c - 1]))
        if r > 0 and not wall_down(r - 1, c) and mx[r - 1][c] is not None:
            prev.append((mx[r - 1][c], mn[r - 1][c]))
        if prev:
            mx[r][c] = max(p[0] for p in prev) + coin[r][c]
            mn[r][c] = min(p[1] for p in prev) + coin[r][c]

# конечные клетки: достижимы, а справа и снизу — стены
ends = [(r, c) for r in range(n) for c in range(n) if mx[r][c] is not None and wall_right(r, c) and wall_down(r, c)]
print(max(mx[r][c] for r, c in ends), min(mn[r][c] for r, c in ends))

Вариант 6

поле 15×15 · концов 5

Квадрат разлинован на N × N клеток (1 < N < 30). Исполнитель Робот может перемещаться по клеткам, выполняя за одно перемещение одну из двух команд: вправо или вниз. По команде вправо Робот перемещается в соседнюю правую клетку, по команде вниз — в соседнюю нижнюю. Квадрат ограничен внешними стенами. Между соседними клетками квадрата также могут быть внутренние стены. Сквозь стену Робот пройти не может. Перед каждым запуском Робота в каждой клетке квадрата лежит монета достоинством от 1 до 100. Посетив клетку, Робот забирает монету с собой; это также относится к начальной и конечной клеткам маршрута. В «угловых» клетках поля — тех, которые справа и снизу ограничены стенами, Робот не может продолжать движение, поэтому накопленная сумма считается итоговой. Таких конечных клеток на поле может быть несколько, включая правую нижнюю клетку поля. Определите максимальную и минимальную денежные суммы среди всех возможных итоговых сумм, которые может собрать Робот, пройдя из левой верхней клетки в конечную клетку маршрута. В ответе укажите два числа — сначала максимальную сумму, затем минимальную. Исходные данные — электронная таблица N × N, каждая ячейка которой соответствует клетке квадрата. Внутренние и внешние стены обозначены утолщёнными линиями.

Файл к варианту: Ege18_v6.xlsx (поле 15×15).

Посмотреть поле на странице
4338588648089346321184994060
4048829317678955641721531
8097388239139815244928814446
45368581957956715860822511654
26623941779538763547465506511
1100678535873233662755692557
63331039360243362100202344062
8152942115869171429645474181
88632460659674944742555946148
58775784508583416712271661
497723476198432166362749579213
77752183778063216089847774267
37939848971729522934293383880
196782175716198132116515287970
243948488720256477248486331

Разбор

Идея. Для каждой клетки считаем наибольшую (и отдельно наименьшую) сумму, с которой Робот может в неё прийти. В клетку можно прийти только слева или сверху, если там нет стены. Поэтому сумма в клетке = монета + max (или min) из сумм соседних клеток слева и сверху.

В электронной таблице. Справа от поля строим копию: в первой клетке — значение монеты, в первой строке =ячейка_слева + монета, в первом столбце =ячейка_сверху + монета, в остальных =МАКС(слева; сверху) + монета. Там, где стена отделяет клетку от соседа, формулу правим вручную: берём только доступного соседа. Затем копию повторяем с МИН.

Конечные клетки (стена справа и снизу, достижимы из начала): O2, O11, B15, H15, O15. Ответ — максимум и минимум посчитанных сумм по этим клеткам: 2026 и 595.

Ответ: 2026 595

Решение на Python. Положите файл рядом с программой (нужна openpyxl). Стены программа находит по стилю границы ячеек: утолщённая граница — 'medium'.

from openpyxl import load_workbook

ws = load_workbook('Ege18_v6.xlsx').active
n = ws.max_row
coin = [[ws.cell(r + 1, c + 1).value for c in range(n)] for r in range(n)]

def wall_right(r, c):   # утолщённая граница справа у клетки или слева у соседней
    return c == n - 1 or ws.cell(r + 1, c + 1).border.right.style == 'medium' \
        or ws.cell(r + 1, c + 2).border.left.style == 'medium'

def wall_down(r, c):
    return r == n - 1 or ws.cell(r + 1, c + 1).border.bottom.style == 'medium' \
        or ws.cell(r + 2, c + 1).border.top.style == 'medium'

# mx[r][c], mn[r][c] — наибольшая и наименьшая сумма на пути из левого верхнего угла в клетку (r, c)
mx = [[None] * n for _ in range(n)]
mn = [[None] * n for _ in range(n)]
for r in range(n):
    for c in range(n):
        if r == 0 and c == 0:
            mx[r][c] = mn[r][c] = coin[0][0]
            continue
        prev = []
        if c > 0 and not wall_right(r, c - 1) and mx[r][c - 1] is not None:
            prev.append((mx[r][c - 1], mn[r][c - 1]))
        if r > 0 and not wall_down(r - 1, c) and mx[r - 1][c] is not None:
            prev.append((mx[r - 1][c], mn[r - 1][c]))
        if prev:
            mx[r][c] = max(p[0] for p in prev) + coin[r][c]
            mn[r][c] = min(p[1] for p in prev) + coin[r][c]

# конечные клетки: достижимы, а справа и снизу — стены
ends = [(r, c) for r in range(n) for c in range(n) if mx[r][c] is not None and wall_right(r, c) and wall_down(r, c)]
print(max(mx[r][c] for r, c in ends), min(mn[r][c] for r, c in ends))

Вариант 7

поле 11×11 · концов 3

Квадрат разлинован на N × N клеток (1 < N < 30). Исполнитель Робот может перемещаться по клеткам, выполняя за одно перемещение одну из двух команд: вправо или вниз. По команде вправо Робот перемещается в соседнюю правую клетку, по команде вниз — в соседнюю нижнюю. Квадрат ограничен внешними стенами. Между соседними клетками квадрата также могут быть внутренние стены. Сквозь стену Робот пройти не может. Перед каждым запуском Робота в каждой клетке квадрата лежит монета достоинством от 1 до 100. Посетив клетку, Робот забирает монету с собой; это также относится к начальной и конечной клеткам маршрута. В «угловых» клетках поля — тех, которые справа и снизу ограничены стенами, Робот не может продолжать движение, поэтому накопленная сумма считается итоговой. Таких конечных клеток на поле может быть несколько, включая правую нижнюю клетку поля. Определите максимальную и минимальную денежные суммы среди всех возможных итоговых сумм, которые может собрать Робот, пройдя из левой верхней клетки в конечную клетку маршрута. В ответе укажите два числа — сначала максимальную сумму, затем минимальную. Исходные данные — электронная таблица N × N, каждая ячейка которой соответствует клетке квадрата. Внутренние и внешние стены обозначены утолщёнными линиями.

Файл к варианту: Ege18_v7.xlsx (поле 11×11).

Посмотреть поле на странице
5272498970613765909118
923657363048263297062
78668544912557589489
140408879651326735432
9983881139662249836811
49896737364997401759
32305357932446341005150
67509614778972100457180
3530784642414570932393
3893189271283712776792
8655972491813453262

Разбор

Идея. Для каждой клетки считаем наибольшую (и отдельно наименьшую) сумму, с которой Робот может в неё прийти. В клетку можно прийти только слева или сверху, если там нет стены. Поэтому сумма в клетке = монета + max (или min) из сумм соседних клеток слева и сверху.

В электронной таблице. Справа от поля строим копию: в первой клетке — значение монеты, в первой строке =ячейка_слева + монета, в первом столбце =ячейка_сверху + монета, в остальных =МАКС(слева; сверху) + монета. Там, где стена отделяет клетку от соседа, формулу правим вручную: берём только доступного соседа. Затем копию повторяем с МИН.

Конечные клетки (стена справа и снизу, достижимы из начала): H6, C11, K11. Ответ — максимум и минимум посчитанных сумм по этим клеткам: 1574 и 661.

Ответ: 1574 661

Решение на Python. Положите файл рядом с программой (нужна openpyxl). Стены программа находит по стилю границы ячеек: утолщённая граница — 'medium'.

from openpyxl import load_workbook

ws = load_workbook('Ege18_v7.xlsx').active
n = ws.max_row
coin = [[ws.cell(r + 1, c + 1).value for c in range(n)] for r in range(n)]

def wall_right(r, c):   # утолщённая граница справа у клетки или слева у соседней
    return c == n - 1 or ws.cell(r + 1, c + 1).border.right.style == 'medium' \
        or ws.cell(r + 1, c + 2).border.left.style == 'medium'

def wall_down(r, c):
    return r == n - 1 or ws.cell(r + 1, c + 1).border.bottom.style == 'medium' \
        or ws.cell(r + 2, c + 1).border.top.style == 'medium'

# mx[r][c], mn[r][c] — наибольшая и наименьшая сумма на пути из левого верхнего угла в клетку (r, c)
mx = [[None] * n for _ in range(n)]
mn = [[None] * n for _ in range(n)]
for r in range(n):
    for c in range(n):
        if r == 0 and c == 0:
            mx[r][c] = mn[r][c] = coin[0][0]
            continue
        prev = []
        if c > 0 and not wall_right(r, c - 1) and mx[r][c - 1] is not None:
            prev.append((mx[r][c - 1], mn[r][c - 1]))
        if r > 0 and not wall_down(r - 1, c) and mx[r - 1][c] is not None:
            prev.append((mx[r - 1][c], mn[r - 1][c]))
        if prev:
            mx[r][c] = max(p[0] for p in prev) + coin[r][c]
            mn[r][c] = min(p[1] for p in prev) + coin[r][c]

# конечные клетки: достижимы, а справа и снизу — стены
ends = [(r, c) for r in range(n) for c in range(n) if mx[r][c] is not None and wall_right(r, c) and wall_down(r, c)]
print(max(mx[r][c] for r, c in ends), min(mn[r][c] for r, c in ends))

Вариант 8

поле 15×15 · концов 4

Квадрат разлинован на N × N клеток (1 < N < 30). Исполнитель Робот может перемещаться по клеткам, выполняя за одно перемещение одну из двух команд: вправо или вниз. По команде вправо Робот перемещается в соседнюю правую клетку, по команде вниз — в соседнюю нижнюю. Квадрат ограничен внешними стенами. Между соседними клетками квадрата также могут быть внутренние стены. Сквозь стену Робот пройти не может. Перед каждым запуском Робота в каждой клетке квадрата лежит монета достоинством от 1 до 100. Посетив клетку, Робот забирает монету с собой; это также относится к начальной и конечной клеткам маршрута. В «угловых» клетках поля — тех, которые справа и снизу ограничены стенами, Робот не может продолжать движение, поэтому накопленная сумма считается итоговой. Таких конечных клеток на поле может быть несколько, включая правую нижнюю клетку поля. Определите максимальную и минимальную денежные суммы среди всех возможных итоговых сумм, которые может собрать Робот, пройдя из левой верхней клетки в конечную клетку маршрута. В ответе укажите два числа — сначала максимальную сумму, затем минимальную. Исходные данные — электронная таблица N × N, каждая ячейка которой соответствует клетке квадрата. Внутренние и внешние стены обозначены утолщёнными линиями.

Файл к варианту: Ege18_v8.xlsx (поле 15×15).

Посмотреть поле на странице
4874596297756189405423871786
8277355086446663939743111002711
554145262804910055756878734089
381903514239246422618410482
26125280379563125156268570685
506870992698782632118323787854
53143034338179176319523622
79748347429193863266545384062
1005217746418828183626391843042
3529399846735198544341597577
376473584485898139953967448062
6995242266688385621125808534
93207853839435244523971265235
62583461642362692449401153
33601928415483588026235184070

Разбор

Идея. Для каждой клетки считаем наибольшую (и отдельно наименьшую) сумму, с которой Робот может в неё прийти. В клетку можно прийти только слева или сверху, если там нет стены. Поэтому сумма в клетке = монета + max (или min) из сумм соседних клеток слева и сверху.

В электронной таблице. Справа от поля строим копию: в первой клетке — значение монеты, в первой строке =ячейка_слева + монета, в первом столбце =ячейка_сверху + монета, в остальных =МАКС(слева; сверху) + монета. Там, где стена отделяет клетку от соседа, формулу правим вручную: берём только доступного соседа. Затем копию повторяем с МИН.

Конечные клетки (стена справа и снизу, достижимы из начала): C6, I6, C9, O15. Ответ — максимум и минимум посчитанных сумм по этим клеткам: 1721 и 358.

Ответ: 1721 358

Решение на Python. Положите файл рядом с программой (нужна openpyxl). Стены программа находит по стилю границы ячеек: утолщённая граница — 'medium'.

from openpyxl import load_workbook

ws = load_workbook('Ege18_v8.xlsx').active
n = ws.max_row
coin = [[ws.cell(r + 1, c + 1).value for c in range(n)] for r in range(n)]

def wall_right(r, c):   # утолщённая граница справа у клетки или слева у соседней
    return c == n - 1 or ws.cell(r + 1, c + 1).border.right.style == 'medium' \
        or ws.cell(r + 1, c + 2).border.left.style == 'medium'

def wall_down(r, c):
    return r == n - 1 or ws.cell(r + 1, c + 1).border.bottom.style == 'medium' \
        or ws.cell(r + 2, c + 1).border.top.style == 'medium'

# mx[r][c], mn[r][c] — наибольшая и наименьшая сумма на пути из левого верхнего угла в клетку (r, c)
mx = [[None] * n for _ in range(n)]
mn = [[None] * n for _ in range(n)]
for r in range(n):
    for c in range(n):
        if r == 0 and c == 0:
            mx[r][c] = mn[r][c] = coin[0][0]
            continue
        prev = []
        if c > 0 and not wall_right(r, c - 1) and mx[r][c - 1] is not None:
            prev.append((mx[r][c - 1], mn[r][c - 1]))
        if r > 0 and not wall_down(r - 1, c) and mx[r - 1][c] is not None:
            prev.append((mx[r - 1][c], mn[r - 1][c]))
        if prev:
            mx[r][c] = max(p[0] for p in prev) + coin[r][c]
            mn[r][c] = min(p[1] for p in prev) + coin[r][c]

# конечные клетки: достижимы, а справа и снизу — стены
ends = [(r, c) for r in range(n) for c in range(n) if mx[r][c] is not None and wall_right(r, c) and wall_down(r, c)]
print(max(mx[r][c] for r, c in ends), min(mn[r][c] for r, c in ends))

Вариант 9

поле 13×13 · концов 6

Квадрат разлинован на N × N клеток (1 < N < 30). Исполнитель Робот может перемещаться по клеткам, выполняя за одно перемещение одну из двух команд: вправо или вниз. По команде вправо Робот перемещается в соседнюю правую клетку, по команде вниз — в соседнюю нижнюю. Квадрат ограничен внешними стенами. Между соседними клетками квадрата также могут быть внутренние стены. Сквозь стену Робот пройти не может. Перед каждым запуском Робота в каждой клетке квадрата лежит монета достоинством от 1 до 100. Посетив клетку, Робот забирает монету с собой; это также относится к начальной и конечной клеткам маршрута. В «угловых» клетках поля — тех, которые справа и снизу ограничены стенами, Робот не может продолжать движение, поэтому накопленная сумма считается итоговой. Таких конечных клеток на поле может быть несколько, включая правую нижнюю клетку поля. Определите максимальную и минимальную денежные суммы среди всех возможных итоговых сумм, которые может собрать Робот, пройдя из левой верхней клетки в конечную клетку маршрута. В ответе укажите два числа — сначала максимальную сумму, затем минимальную. Исходные данные — электронная таблица N × N, каждая ячейка которой соответствует клетке квадрата. Внутренние и внешние стены обозначены утолщёнными линиями.

Файл к варианту: Ege18_v9.xlsx (поле 13×13).

Посмотреть поле на странице
70226817213587649483747595
1484957167376836059314421
19673745891393358798445
5488757222846080922476429
911930571185747467605135
9725773117936897401538142
709649037474685444794359
40242533772230701356161734
33897571302816645505363
839292867431021822338139
212755279095538815448414
1436043441850424019612830
87631995247079118293625474

Разбор

Идея. Для каждой клетки считаем наибольшую (и отдельно наименьшую) сумму, с которой Робот может в неё прийти. В клетку можно прийти только слева или сверху, если там нет стены. Поэтому сумма в клетке = монета + max (или min) из сумм соседних клеток слева и сверху.

В электронной таблице. Справа от поля строим копию: в первой клетке — значение монеты, в первой строке =ячейка_слева + монета, в первом столбце =ячейка_сверху + монета, в остальных =МАКС(слева; сверху) + монета. Там, где стена отделяет клетку от соседа, формулу правим вручную: берём только доступного соседа. Затем копию повторяем с МИН.

Конечные клетки (стена справа и снизу, достижимы из начала): K3, B7, D7, G7, H10, M13. Ответ — максимум и минимум посчитанных сумм по этим клеткам: 1629 и 385.

Ответ: 1629 385

Решение на Python. Положите файл рядом с программой (нужна openpyxl). Стены программа находит по стилю границы ячеек: утолщённая граница — 'medium'.

from openpyxl import load_workbook

ws = load_workbook('Ege18_v9.xlsx').active
n = ws.max_row
coin = [[ws.cell(r + 1, c + 1).value for c in range(n)] for r in range(n)]

def wall_right(r, c):   # утолщённая граница справа у клетки или слева у соседней
    return c == n - 1 or ws.cell(r + 1, c + 1).border.right.style == 'medium' \
        or ws.cell(r + 1, c + 2).border.left.style == 'medium'

def wall_down(r, c):
    return r == n - 1 or ws.cell(r + 1, c + 1).border.bottom.style == 'medium' \
        or ws.cell(r + 2, c + 1).border.top.style == 'medium'

# mx[r][c], mn[r][c] — наибольшая и наименьшая сумма на пути из левого верхнего угла в клетку (r, c)
mx = [[None] * n for _ in range(n)]
mn = [[None] * n for _ in range(n)]
for r in range(n):
    for c in range(n):
        if r == 0 and c == 0:
            mx[r][c] = mn[r][c] = coin[0][0]
            continue
        prev = []
        if c > 0 and not wall_right(r, c - 1) and mx[r][c - 1] is not None:
            prev.append((mx[r][c - 1], mn[r][c - 1]))
        if r > 0 and not wall_down(r - 1, c) and mx[r - 1][c] is not None:
            prev.append((mx[r - 1][c], mn[r - 1][c]))
        if prev:
            mx[r][c] = max(p[0] for p in prev) + coin[r][c]
            mn[r][c] = min(p[1] for p in prev) + coin[r][c]

# конечные клетки: достижимы, а справа и снизу — стены
ends = [(r, c) for r in range(n) for c in range(n) if mx[r][c] is not None and wall_right(r, c) and wall_down(r, c)]
print(max(mx[r][c] for r, c in ends), min(mn[r][c] for r, c in ends))

Вариант 10

поле 15×15 · концов 2

Квадрат разлинован на N × N клеток (1 < N < 30). Исполнитель Робот может перемещаться по клеткам, выполняя за одно перемещение одну из двух команд: вправо или вниз. По команде вправо Робот перемещается в соседнюю правую клетку, по команде вниз — в соседнюю нижнюю. Квадрат ограничен внешними стенами. Между соседними клетками квадрата также могут быть внутренние стены. Сквозь стену Робот пройти не может. Перед каждым запуском Робота в каждой клетке квадрата лежит монета достоинством от 1 до 100. Посетив клетку, Робот забирает монету с собой; это также относится к начальной и конечной клеткам маршрута. В «угловых» клетках поля — тех, которые справа и снизу ограничены стенами, Робот не может продолжать движение, поэтому накопленная сумма считается итоговой. Таких конечных клеток на поле может быть несколько, включая правую нижнюю клетку поля. Определите максимальную и минимальную денежные суммы среди всех возможных итоговых сумм, которые может собрать Робот, пройдя из левой верхней клетки в конечную клетку маршрута. В ответе укажите два числа — сначала максимальную сумму, затем минимальную. Исходные данные — электронная таблица N × N, каждая ячейка которой соответствует клетке квадрата. Внутренние и внешние стены обозначены утолщёнными линиями.

Файл к варианту: Ege18_v10.xlsx (поле 15×15).

Посмотреть поле на странице
3487799179449158238887192033
379260502468401074317225699863
27334314223185053347872701229
399789179130536217253142821822
538722686685134699911351925430
191293745093302347613481431
9411233033739660214878788916
228846251533746218453829748375
97865395137247533402771469571
7143151987729778512034518398
739788525827930616143897198
68536787511852670615132336218
67221579890148913306916249133
6585861901660733135130881918
59724975570594540722496256081

Разбор

Идея. Для каждой клетки считаем наибольшую (и отдельно наименьшую) сумму, с которой Робот может в неё прийти. В клетку можно прийти только слева или сверху, если там нет стены. Поэтому сумма в клетке = монета + max (или min) из сумм соседних клеток слева и сверху.

В электронной таблице. Справа от поля строим копию: в первой клетке — значение монеты, в первой строке =ячейка_слева + монета, в первом столбце =ячейка_сверху + монета, в остальных =МАКС(слева; сверху) + монета. Там, где стена отделяет клетку от соседа, формулу правим вручную: берём только доступного соседа. Затем копию повторяем с МИН.

Конечные клетки (стена справа и снизу, достижимы из начала): F15, O15. Ответ — максимум и минимум посчитанных сумм по этим клеткам: 1800 и 705.

Ответ: 1800 705

Решение на Python. Положите файл рядом с программой (нужна openpyxl). Стены программа находит по стилю границы ячеек: утолщённая граница — 'medium'.

from openpyxl import load_workbook

ws = load_workbook('Ege18_v10.xlsx').active
n = ws.max_row
coin = [[ws.cell(r + 1, c + 1).value for c in range(n)] for r in range(n)]

def wall_right(r, c):   # утолщённая граница справа у клетки или слева у соседней
    return c == n - 1 or ws.cell(r + 1, c + 1).border.right.style == 'medium' \
        or ws.cell(r + 1, c + 2).border.left.style == 'medium'

def wall_down(r, c):
    return r == n - 1 or ws.cell(r + 1, c + 1).border.bottom.style == 'medium' \
        or ws.cell(r + 2, c + 1).border.top.style == 'medium'

# mx[r][c], mn[r][c] — наибольшая и наименьшая сумма на пути из левого верхнего угла в клетку (r, c)
mx = [[None] * n for _ in range(n)]
mn = [[None] * n for _ in range(n)]
for r in range(n):
    for c in range(n):
        if r == 0 and c == 0:
            mx[r][c] = mn[r][c] = coin[0][0]
            continue
        prev = []
        if c > 0 and not wall_right(r, c - 1) and mx[r][c - 1] is not None:
            prev.append((mx[r][c - 1], mn[r][c - 1]))
        if r > 0 and not wall_down(r - 1, c) and mx[r - 1][c] is not None:
            prev.append((mx[r - 1][c], mn[r - 1][c]))
        if prev:
            mx[r][c] = max(p[0] for p in prev) + coin[r][c]
            mn[r][c] = min(p[1] for p in prev) + coin[r][c]

# конечные клетки: достижимы, а справа и снизу — стены
ends = [(r, c) for r in range(n) for c in range(n) if mx[r][c] is not None and wall_right(r, c) and wall_down(r, c)]
print(max(mx[r][c] for r, c in ends), min(mn[r][c] for r, c in ends))

Для самостоятельного решения

Варианты 11–15 без разборов. Ответ можно проверить кнопкой.

Вариант 11

поле 11×11 · концов 3

Квадрат разлинован на N × N клеток (1 < N < 30). Исполнитель Робот может перемещаться по клеткам, выполняя за одно перемещение одну из двух команд: вправо или вниз. По команде вправо Робот перемещается в соседнюю правую клетку, по команде вниз — в соседнюю нижнюю. Квадрат ограничен внешними стенами. Между соседними клетками квадрата также могут быть внутренние стены. Сквозь стену Робот пройти не может. Перед каждым запуском Робота в каждой клетке квадрата лежит монета достоинством от 1 до 100. Посетив клетку, Робот забирает монету с собой; это также относится к начальной и конечной клеткам маршрута. В «угловых» клетках поля — тех, которые справа и снизу ограничены стенами, Робот не может продолжать движение, поэтому накопленная сумма считается итоговой. Таких конечных клеток на поле может быть несколько, включая правую нижнюю клетку поля. Определите максимальную и минимальную денежные суммы среди всех возможных итоговых сумм, которые может собрать Робот, пройдя из левой верхней клетки в конечную клетку маршрута. В ответе укажите два числа — сначала максимальную сумму, затем минимальную. Исходные данные — электронная таблица N × N, каждая ячейка которой соответствует клетке квадрата. Внутренние и внешние стены обозначены утолщёнными линиями.

Файл к варианту: Ege18_v11.xlsx (поле 11×11).

Посмотреть поле на странице
941164604445581955425
861196157962565765549
5775874036369177145121
10097726886896100723611
421333538232493704520
9720968859268941352086
144719252599146844894
922390246218109622116
993997110759555683797
706655253672177846333
752017453151788138062

Вариант 12

поле 10×10 · концов 2

Квадрат разлинован на N × N клеток (1 < N < 30). Исполнитель Робот может перемещаться по клеткам, выполняя за одно перемещение одну из двух команд: вправо или вниз. По команде вправо Робот перемещается в соседнюю правую клетку, по команде вниз — в соседнюю нижнюю. Квадрат ограничен внешними стенами. Между соседними клетками квадрата также могут быть внутренние стены. Сквозь стену Робот пройти не может. Перед каждым запуском Робота в каждой клетке квадрата лежит монета достоинством от 1 до 100. Посетив клетку, Робот забирает монету с собой; это также относится к начальной и конечной клеткам маршрута. В «угловых» клетках поля — тех, которые справа и снизу ограничены стенами, Робот не может продолжать движение, поэтому накопленная сумма считается итоговой. Таких конечных клеток на поле может быть несколько, включая правую нижнюю клетку поля. Определите максимальную и минимальную денежные суммы среди всех возможных итоговых сумм, которые может собрать Робот, пройдя из левой верхней клетки в конечную клетку маршрута. В ответе укажите два числа — сначала максимальную сумму, затем минимальную. Исходные данные — электронная таблица N × N, каждая ячейка которой соответствует клетке квадрата. Внутренние и внешние стены обозначены утолщёнными линиями.

Файл к варианту: Ege18_v12.xlsx (поле 10×10).

Посмотреть поле на странице
526284765438139672
24915892897993264520
9398294986253531889
16539246862742591
45746467224653219616
48481728675738721
465574160913871029
60599099562123175621
78845378339992867431
447132843990942943

Вариант 13

поле 12×12 · концов 3

Квадрат разлинован на N × N клеток (1 < N < 30). Исполнитель Робот может перемещаться по клеткам, выполняя за одно перемещение одну из двух команд: вправо или вниз. По команде вправо Робот перемещается в соседнюю правую клетку, по команде вниз — в соседнюю нижнюю. Квадрат ограничен внешними стенами. Между соседними клетками квадрата также могут быть внутренние стены. Сквозь стену Робот пройти не может. Перед каждым запуском Робота в каждой клетке квадрата лежит монета достоинством от 1 до 100. Посетив клетку, Робот забирает монету с собой; это также относится к начальной и конечной клеткам маршрута. В «угловых» клетках поля — тех, которые справа и снизу ограничены стенами, Робот не может продолжать движение, поэтому накопленная сумма считается итоговой. Таких конечных клеток на поле может быть несколько, включая правую нижнюю клетку поля. Определите максимальную и минимальную денежные суммы среди всех возможных итоговых сумм, которые может собрать Робот, пройдя из левой верхней клетки в конечную клетку маршрута. В ответе укажите два числа — сначала максимальную сумму, затем минимальную. Исходные данные — электронная таблица N × N, каждая ячейка которой соответствует клетке квадрата. Внутренние и внешние стены обозначены утолщёнными линиями.

Файл к варианту: Ege18_v13.xlsx (поле 12×12).

Посмотреть поле на странице
782941294567988024953035
137599333416687391934100
44363628458236684721648
2895238079981009963951416
1429316161087963241412
256573157031837356896138
553191351511785911482921
81154313306820936406826
79158343936946679682553
34663966310199856823326
534687122136382092959355
312647474355997755857067

Вариант 14

поле 13×13 · концов 6

Квадрат разлинован на N × N клеток (1 < N < 30). Исполнитель Робот может перемещаться по клеткам, выполняя за одно перемещение одну из двух команд: вправо или вниз. По команде вправо Робот перемещается в соседнюю правую клетку, по команде вниз — в соседнюю нижнюю. Квадрат ограничен внешними стенами. Между соседними клетками квадрата также могут быть внутренние стены. Сквозь стену Робот пройти не может. Перед каждым запуском Робота в каждой клетке квадрата лежит монета достоинством от 1 до 100. Посетив клетку, Робот забирает монету с собой; это также относится к начальной и конечной клеткам маршрута. В «угловых» клетках поля — тех, которые справа и снизу ограничены стенами, Робот не может продолжать движение, поэтому накопленная сумма считается итоговой. Таких конечных клеток на поле может быть несколько, включая правую нижнюю клетку поля. Определите максимальную и минимальную денежные суммы среди всех возможных итоговых сумм, которые может собрать Робот, пройдя из левой верхней клетки в конечную клетку маршрута. В ответе укажите два числа — сначала максимальную сумму, затем минимальную. Исходные данные — электронная таблица N × N, каждая ячейка которой соответствует клетке квадрата. Внутренние и внешние стены обозначены утолщёнными линиями.

Файл к варианту: Ege18_v14.xlsx (поле 13×13).

Посмотреть поле на странице
93925992974347133543349
3125692252781516670153385
54557745122710014111817144
82602265232680114947118368
5081531334296738126757129
9422813545236826541887639
7129555798376283166491327
9203277733518238882869267
17747843268193779965741440
2092721378851233352779956
88615829778876497551681358
6994181030318292276777396
145987605884263937445839

Вариант 15

поле 14×14 · концов 5

Квадрат разлинован на N × N клеток (1 < N < 30). Исполнитель Робот может перемещаться по клеткам, выполняя за одно перемещение одну из двух команд: вправо или вниз. По команде вправо Робот перемещается в соседнюю правую клетку, по команде вниз — в соседнюю нижнюю. Квадрат ограничен внешними стенами. Между соседними клетками квадрата также могут быть внутренние стены. Сквозь стену Робот пройти не может. Перед каждым запуском Робота в каждой клетке квадрата лежит монета достоинством от 1 до 100. Посетив клетку, Робот забирает монету с собой; это также относится к начальной и конечной клеткам маршрута. В «угловых» клетках поля — тех, которые справа и снизу ограничены стенами, Робот не может продолжать движение, поэтому накопленная сумма считается итоговой. Таких конечных клеток на поле может быть несколько, включая правую нижнюю клетку поля. Определите максимальную и минимальную денежные суммы среди всех возможных итоговых сумм, которые может собрать Робот, пройдя из левой верхней клетки в конечную клетку маршрута. В ответе укажите два числа — сначала максимальную сумму, затем минимальную. Исходные данные — электронная таблица N × N, каждая ячейка которой соответствует клетке квадрата. Внутренние и внешние стены обозначены утолщёнными линиями.

Файл к варианту: Ege18_v15.xlsx (поле 14×14).

Посмотреть поле на странице
281238573538729336011445513
2595956195409598454597446423
7419466129595616986586731018
54838018215122169285993841
97128156075815856406761260
429971167924683627849747385
161223751838803380896038996
5451478959846576702358792
905714735824192142962784752
7495583283546935885418639887
87509663696996222211955582
10058272042934712487621131077
601660251503810966126858769
71674033856308999914218261