Задание 18
Электронные таблицы: целочисленные данные
Лучшая сумма до клетки и таблица в Excel: стены, тупики и недостижимые клетки, другие направления, цена шага и запас энергии.
6 подтем · 22 задачи + 11 дополнительных · повышенный · ≈ 8 мин
Подтема 1 из 6
Лучшая сумма до клетки
Что спрашивают в задании 18 и как найти наибольшую и наименьшую сумму маршрута, не перебирая маршруты.
Как устроена тема
В задании 18 дают файл Excel: квадратное поле, в каждой клетке — монета. Робот идёт по полю по заданным правилам и собирает монеты. Нужно найти, какую наибольшую и какую наименьшую сумму он может собрать. Вот задача, которую мы будем решать всю тему:
«Квадрат разлинован на N × N клеток (1 < N < 30). Исполнитель Робот может перемещаться по клеткам, выполняя за одно перемещение одну из двух команд: вправо или вниз. Квадрат ограничен внешними стенами. Между соседними клетками квадрата также могут быть внутренние стены. Сквозь стену Робот пройти не может. Перед каждым запуском Робота в каждой клетке квадрата лежит монета достоинством от 1 до 100. Посетив клетку, Робот забирает монету с собой; это также относится к начальной и конечной клеткам маршрута Робота. В «угловых» клетках поля — тех, которые справа и снизу ограничены стенами, Робот не может продолжать движение, поэтому накопленная сумма считается итоговой. Таких конечных клеток на поле может быть несколько, включая правую нижнюю клетку поля. Определите максимальную и минимальную денежные суммы среди всех возможных итоговых сумм, которые может собрать Робот, пройдя из левой верхней клетки в конечную клетку маршрута. В ответе укажите два числа — сначала максимальную сумму, затем минимальную. Исходные данные представляют собой электронную таблицу размером N × N, каждая ячейка которой соответствует клетке квадрата. Внутренние и внешние стены обозначены утолщёнными линиями.»
Маршрутов на поле 20 × 20 — миллиарды, перебрать их не выйдет. Поэтому задачу решают таблицей в Excel: для каждой клетки считают лучшую сумму, с которой в неё можно прийти. Каждый шаг сначала проверим руками на маленьком поле 4 × 4. Разберём условие:
| В условии | Что это значит |
|---|---|
| вправо или вниз | назад робот не возвращается: каждую клетку он проходит не больше одного раза |
| внутренние стены | между некоторыми соседними клетками перейти нельзя |
| забирает монету, в том числе в начальной и конечной клетках | сумма маршрута — монеты всех его клеток, первой и последней тоже |
| «угловые» клетки, ограниченные справа и снизу | тупики: здесь маршрут заканчивается |
| конечных клеток может быть несколько | ответ ищут среди всех тупиков, а не только в правой нижней клетке |
| сначала максимальную сумму, затем минимальную | ответ — два числа в этом порядке |
Тема состоит из пяти подтем и дополнительного урока — у каждой своя страница. Идём по ним по порядку:
- Лучшая сумма до клетки — ты сейчас здесь: правило клетки на поле 4 × 4.
- Таблица в Excel — то же правило формулами.
- Стены — как стена меняет формулу.
- Тупики и недостижимые клетки — решим задачу темы целиком: ответ 2629 378.
- Другие направления и правила — влево и вверх, старт в середине поля, цена шага, запас энергии.
- Диагонали, ладья и число маршрутов — дополнительный урок для редких задач.
Поле и маршрут
Что такое маршрут и как посчитать его сумму?
Маршрут — цепочка клеток от старта до финиша, а его сумма — сумма монет всех этих клеток. Начнём без стен: робот идёт из левой верхней клетки A1 в правую нижнюю D4. Буквы — столбцы, числа — строки, как адреса ячеек Excel:
| Строка | A | B | C | D |
|---|---|---|---|---|
| 1 | 2 | 7 | 4 | 1 |
| 2 | 5 | 1 | 8 | 3 |
| 3 | 2 | 6 | 2 | 9 |
| 4 | 4 | 3 | 7 | 2 |
Маршрут A1 → B1 → B2 → C2 → C3 → D3 → D4 собирает 2 + 7 + 1 + 8 + 2 + 9 + 2 = 31, а маршрут A1 → A2 → B2 → B3 → B4 → C4 → D4 — 26. Нам нужны наибольшая и наименьшая суммы среди всех маршрутов. На этом поле маршрутов 20, а на поле 20 × 20 — больше 35 миллиардов, так что перебирать их не будем.
Тонкости:почему не идти к самой дорогой монете
Ближайшая дорогая монета может увести робота от выгодной части поля. На поле 1, 9, 1 / 8, 1, 1 / 100, 100, 1 шаг к девятке оставляет позади обе сотни: лучший маршрут после него — 112, а маршрут вниз через сотни — 210.
Последний шаг
Как найти лучшую сумму до клетки B2, не перебирая маршруты?
Посмотри, откуда робот сделал последний шаг. В B2 он пришёл либо слева, из A2, либо сверху, из B1. Лучшая сумма до B2 — её монета плюс лучшая из сумм до A2 и до B1.
До A2 путь один: 2 + 5 = 7. До B1 тоже один: 2 + 7 = 9. Значит, наибольшая сумма до B2 — 1 + 9 = 10, а наименьшая — 1 + 7 = 8.
Сравнивают суммы всего пути до соседей, а не монеты в них. А складывать суммы слева и сверху нельзя: это два разных маршрута, а в клетку робот приходит один раз.
Почему хватает лучшей суммы
Почему для клетки достаточно помнить одну лучшую сумму?
Два маршрута, пришедшие в одну клетку, дальше могут идти одинаково — и тот, что впереди, так и останется впереди. В C3 можно прийти с суммой 23 (A1 → B1 → C1 → C2 → C3) или с суммой 17 (A1 → A2 → A3 → B3 → C3). Продолжим оба одинаково, через D3 в D4:
Какое бы продолжение мы ни выбрали, к обеим суммам прибавится одно и то же. Поэтому маршрут с суммой 17 уже не обгонит маршрут с 23, и для максимума в C3 достаточно помнить 23.
Таблица лучших сумм
Как посчитать лучшие суммы для всех клеток поля?
Идём по строкам сверху вниз, а в строке — слева направо: к каждой клетке суммы её соседей слева и сверху уже готовы. Старт A1 — просто его монета, 2. В верхнюю строку приходят только слева, в левый столбец — только сверху: там суммы просто накапливаются. Остальные клетки — по правилу последнего шага. Наибольшие и наименьшие суммы считают в двух отдельных таблицах. Пройди заполнение по шагам:
- A1 — старт: робот уже забрал монету 2, обе суммы равны 2.
- Верхняя строка: прийти можно только слева, путь единственный — накопленные суммы 2, 9, 13, 14, в обеих таблицах одинаковые.
- Левый столбец: прийти можно только сверху, путь единственный — накопленные суммы 2, 7, 9, 13, в обеих таблицах одинаковые.
- B2: приходят из A2 и B1. Максимум 1 + max(7; 9) = 10, минимум 1 + min(7; 9) = 8.
- C2: приходят из B2 и C1. Максимум 8 + max(10; 13) = 21, минимум 8 + min(8; 13) = 16.
- D2: приходят из C2 и D1. Максимум 3 + max(21; 14) = 24, минимум 3 + min(16; 14) = 17.
- B3: приходят из A3 и B2. Максимум 6 + max(9; 10) = 16, минимум 6 + min(9; 8) = 14.
- C3: приходят из B3 и C2. Максимум 2 + max(16; 21) = 23, минимум 2 + min(14; 16) = 16.
- D3: приходят из C3 и D2. Максимум 9 + max(23; 24) = 33, минимум 9 + min(16; 17) = 25.
- B4: приходят из A4 и B3. Максимум 3 + max(13; 16) = 19, минимум 3 + min(13; 14) = 16.
- C4: приходят из B4 и C3. Максимум 7 + max(19; 23) = 30, минимум 7 + min(16; 16) = 23.
- D4: приходят из C4 и D3. Максимум 2 + max(30; 33) = 35, минимум 2 + min(23; 25) = 25. Готово: в D4 наибольшая сумма 35, наименьшая 25.
В D4 получилось 35 — это наибольшая сумма маршрута, и 25 — наименьшая. Маршруты 31 и 26 из начала урока лежат между ними.
Такой способ — решить задачу для каждой клетки и записать ответы в таблицу — называют динамическим программированием. Слово «программирование» тут историческое: считать можно и в Excel, и руками.
Итого
- Маршрутклетки от старта до финиша, сумма — их монеты
- Последний шагпри ходах вправо и вниз — слева или сверху
- Правило клеткимонета + лучшая из сумм соседей слева и сверху
- Краястарт — своя монета; верхняя строка и левый столбец — накопленные суммы
- Две таблицымаксимум и минимум считают отдельно
- Поле 4 × 4наибольшая 35, наименьшая 25
Проверьте себя
Ответь сначала сам, потом открой ответ.
ОтветСкрыть ответ
ОтветСкрыть ответ
ОтветСкрыть ответ
ОтветСкрыть ответ
ОтветСкрыть ответ
Практика
Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.
Жадный робот
На поле 3 × 3 с монетами 1, 5, 1 / 4, 3, 2 / 9, 9, 1 (по строкам) робот на каждом шаге идёт к соседней монете побольше. Какую сумму он соберёт и какова наибольшая возможная сумма?
Введите два числа через пробел: сумму жадного робота, затем наибольшую.
Подсказка
Жадный выбор не видит, что ждёт дальше: сравни его с лучшим маршрутом.
Решение
Жадный робот: A1 → B1 → B2 → B3 → C3, сумма 1 + 5 + 3 + 9 + 1 = 19. Наибольшая сумма 24: A1 → A2 → A3 → B3 → C3.
Ответ: 19 24
Сумма по двум предшественникам
В текущей клетке монета стоит 4. До соседа слева максимальная сумма — 29, минимальная — 18. До соседа сверху — 20 и 15. Оба прихода разрешены. Найди максимальную и минимальную суммы до текущей клетки.
Введите два числа через пробел: максимальную, затем минимальную сумму.
Подсказка
К монете клетки прибавь лучшую из сумм соседей.
Решение
Максимум 4 + max(29; 20) = 33, минимум 4 + min(18; 15) = 19.
Ответ: 33 19
Обе таблицы на поле 3 × 3
На поле 3 × 3 с монетами 3, 4, 2 / 1, 8, 5 / 6, 2, 7 робот движется из A1 в C3 вправо и вниз. Построй обе таблицы и найди максимум и минимум.
Введите два числа через пробел: максимум, затем минимум.
Подсказка
Края — накопленные суммы, остальные клетки — по правилу клетки.
Решение
Максимум: 3, 7, 9 / 4, 15, 20 / 10, 17, 27; минимум: 3, 7, 9 / 4, 12, 14 / 10, 12, 19. Ответ: 27 и 19.
Ответ: 27 19
Отрицательные числа
На поле 3 × 3 с числами −2, 5, −1 / 4, −6, 3 / −3, 2, −4 найди наибольшую и наименьшую сумму маршрута из A1 в C3.
Введите два числа через пробел: максимум, затем минимум.
Подсказка
Правило клетки не зависит от знака чисел.
Решение
Максимум 1 (A1 → B1 → C1 → C2 → C3: −2 + 5 − 1 + 3 − 4), минимум −6 (A1 → A2 → B2 → B3 → C3: −2 + 4 − 6 + 2 − 4).
Ответ: 1 -6
Поле 4 × 5
Поле из 4 строк и 5 столбцов: 6, 4, 15, 11, 8 / 7, 16, 16, 6, 16 / 10, 15, 9, 7, 9 / 4, 11, 17, 6, 8. Робот идёт из левой верхней клетки в правую нижнюю вправо и вниз. Найди максимальную и минимальную денежные суммы, которые он может собрать.
Введите через пробел максимальную сумму, затем минимальную.
Подсказка
Построй обе таблицы: наибольших и наименьших сумм.
Решение
Максимум 86, минимум 63 — значения обеих таблиц в правой нижней клетке.
Ответ: 86 63