Условие
Квадрат разлинован на 20 × 20 клеток. В каждой клетке лежит монета достоинством от 1 до 100. Исполнитель Робот стартует из правой нижней клетки и за одно перемещение может выполнить одну из трёх команд:
Определите среднее арифметическое между минимальной и максимальной суммами монет среди всех возможных маршрутов Робота. В ответе запишите только целое число.
Исходные данные: электронная таблица 20 × 20 в прилагаемом файле. Строки пронумерованы сверху вниз (1–20), столбцы — слева направо (1–20).
- влево — переместиться в соседнюю клетку слева;
- вверх — переместиться в соседнюю клетку сверху;
- влево-вверх — переместиться по диагонали в соседнюю клетку слева-сверху.
Определите среднее арифметическое между минимальной и максимальной суммами монет среди всех возможных маршрутов Робота. В ответе запишите только целое число.
Исходные данные: электронная таблица 20 × 20 в прилагаемом файле. Строки пронумерованы сверху вниз (1–20), столбцы — слева направо (1–20).
Решение
Решение методом динамического программирования.
Обозначим клетки: строка r (0=верхняя, 19=нижняя), столбец c (0=левый, 19=правый). Робот стартует из (19,19) и заканчивает в (0,0).
Определим dp_max[r][c] = максимальная сумма на пути из (r,c) в (0,0),
dp_min[r][c] = минимальная сумма.
Переходы (из клетки (r,c) Робот идёт в одну из трёх):
• влево: (r, c-1) — только если c > 0
• вверх: (r-1, c) — только если r > 0
• влево-вверх: (r-1,c-1) — только если r > 0 и c > 0
Граничные случаи:
• dp[0][0] = grid[0][0] = 80
• dp[0][c] = grid[0][c] + dp[0][c-1] (строка 0 — только влево)
• dp[r][0] = grid[r][0] + dp[r-1][0] (столбец 0 — только вверх)
Результаты:
Максимальная сумма: dp_max[19][19] = 2720
Минимальная сумма: dp_min[19][19] = 928
Маршрут с максимальной суммой (ключевые клетки):
(19,19)→(18,19)→(18,18)→(18,17)→(18,16)→(17,16)→(16,16)→(15,16)→(14,16)→(14,15)
→(13,15)→(12,15)→(11,15)→(10,15)→(9,15)→(9,14)→...→(9,9)→(8,9)→(7,9)→(7,8)
→(7,7)→(6,7)→(6,6)→(6,5)→(5,5)→(5,4)→(5,3)→(5,2)→(5,1)→(4,1)→(3,1)→(2,1)
→(1,1)→(1,0)→(0,0). Сумма = 2720.
Маршрут с минимальной суммой (преимущественно диагональные ходы):
(19,19)→(18,18)→(17,17)→(16,17)→(15,17)→(14,17)→(13,16)→(12,16)→(11,16)
→(10,16)→(9,16)→(8,16)→(7,16)→(6,15)→(5,14)→(4,13)→(4,12)→(4,11)→(4,10)
→(3,9)→(3,8)→(2,7)→(1,6)→(1,5)→(1,4)→(1,3)→(0,2)→(0,1)→(0,0). Сумма = 928.
Среднее арифметическое: (2720 + 928) / 2 = 3648 / 2 = 1824.
Ответ: 1824.
Обозначим клетки: строка r (0=верхняя, 19=нижняя), столбец c (0=левый, 19=правый). Робот стартует из (19,19) и заканчивает в (0,0).
Определим dp_max[r][c] = максимальная сумма на пути из (r,c) в (0,0),
dp_min[r][c] = минимальная сумма.
Переходы (из клетки (r,c) Робот идёт в одну из трёх):
• влево: (r, c-1) — только если c > 0
• вверх: (r-1, c) — только если r > 0
• влево-вверх: (r-1,c-1) — только если r > 0 и c > 0
Граничные случаи:
• dp[0][0] = grid[0][0] = 80
• dp[0][c] = grid[0][c] + dp[0][c-1] (строка 0 — только влево)
• dp[r][0] = grid[r][0] + dp[r-1][0] (столбец 0 — только вверх)
Результаты:
Максимальная сумма: dp_max[19][19] = 2720
Минимальная сумма: dp_min[19][19] = 928
Маршрут с максимальной суммой (ключевые клетки):
(19,19)→(18,19)→(18,18)→(18,17)→(18,16)→(17,16)→(16,16)→(15,16)→(14,16)→(14,15)
→(13,15)→(12,15)→(11,15)→(10,15)→(9,15)→(9,14)→...→(9,9)→(8,9)→(7,9)→(7,8)
→(7,7)→(6,7)→(6,6)→(6,5)→(5,5)→(5,4)→(5,3)→(5,2)→(5,1)→(4,1)→(3,1)→(2,1)
→(1,1)→(1,0)→(0,0). Сумма = 2720.
Маршрут с минимальной суммой (преимущественно диагональные ходы):
(19,19)→(18,18)→(17,17)→(16,17)→(15,17)→(14,17)→(13,16)→(12,16)→(11,16)
→(10,16)→(9,16)→(8,16)→(7,16)→(6,15)→(5,14)→(4,13)→(4,12)→(4,11)→(4,10)
→(3,9)→(3,8)→(2,7)→(1,6)→(1,5)→(1,4)→(1,3)→(0,2)→(0,1)→(0,0). Сумма = 928.
Среднее арифметическое: (2720 + 928) / 2 = 3648 / 2 = 1824.
Ответ: 1824.
Ответ:1824