Статья Автор: Лебедев Дмитрий

Разбор демо варианта типа 18

Задание 3-1

Робот стоит в левом верхнем углу прямоугольного поля, в каждой клетке которого записано целое число. В некоторых клетках записано число –1, в эти клетки роботу заходить нельзя. Для вашего удобства такие клетки выделены тёмным фоном. В остальных клетках записаны положительные числа. За один ход робот может переместиться на одну клетку вправо или на одну клетку вниз.
Клетка, из которой робот не может сделать допустимого хода (справа и снизу находятся границы поля или запрещённые клетки), называется финальной. На поле может быть несколько финальных клеток. В начальный момент робот обладает некоторым запасом энергии. Расход энергии на запуск робота равен числу, записанному в стартовой клетке. В дальнейшем расход энергии на переход в каждую следующую клетку равен числу, записанному в этой клетке.

Задание 1. Определите количество финальных клеток.
Задание 2. Определите минимальный начальный запас энергии, который позволит роботу добраться до любой финальной клетки.

Задание 3. Определите минимальный начальный запас энергии, который позволит роботу пройти любым допустимым маршрутом

Входные данные.
Исходные данные представлены в двух форматах (тестовом файле, электронной таблице)
Выходные данные
Три числа - ответы на задание (каждое число в отдельной  строке)

входные данные выходные данные
15 17 48 84 79 85 48 19 31 48
72 74 -1 44 48 -1 25 86 -1 -1
78 83 -1 14 38 -1 69 74 78 58
18 52 62 85 11 -1 34 50 58 42
93 76 50 13 44 58 11 52 85 81
55 -1 -1 -1 -1 93 -1 62 99 73
10 64 50 81 96 97 -1 68 46 16
-1 -1 62 71 -1 -1 -1 55 43 22
-1 -1 30 83 28 77 14 11 -1 47
-1 -1 53 -1 86 59 75 23 66 65
4
474
1104
15    17    48    84    79    85    48    19    31    48
72    74    -1    44    48    -1    25    86    -1    -1
78    83    -1    14    38    -1    69    74    78    58
18    52    62    85    11    -1    34    50    58    42
93    76    50    13    44    58    11    52    85    81
55    -1    -1    -1    -1    93    -1    62    99    73
10    64    50    81    96    97    -1    68    46    16
-1    -1    62    71    -1    -1    -1    55    43    22
-1    -1    30    83    28    77    14    11    -1    47
-1    -1    53    -1    86    59    75    23    66    65

sss


По условию, есть одна "стартовая" точка и несколько "финальных". 
Для решения удобно применить метод "сверху-вниз" с запуском от всех "финальных" позиций.
Определим "финальные" позиции с помощью подпрограммы isnext(pos)

Определение максимальных сумм.
Напишем программу, осуществляющую "динамическую рекурсию" методом "сверху вниз" с поиском максимальной  и минимальной сумм пути.
Для этого будем
  • использовать "обратные" команды (влево заменяет вправо, ввниз заменяет вверх)
  • значения будем записывать в словарь Dpmax и Dpmin
  • полученные результаты добавим в  End_pos
Программы поиска максимального и минимального пути - программы-близнецы, поэтому одну убрали

Прикрепленные файлы
18-00.txt
18-01_10.txt
18_24-10.txt
Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать