|
|
Дистанционные семинары
по подготовке к олимпиадам по информатике
Будем решать более общую задачу (что, как ни странно, зачастую оказывается проще),
а именно найдем цену bi,j минимального пути из правой верхней клетки в клетку (i,j). Заметим, что попасть в клетку (i,j) мы могли
только из клеток (i-1,j) и (i,j-1). Значит, задачу можно свести к решению
подзадач для клеток (i-1,j) и (i,j-1).
Результаты решения подзадач удобно хранить в таблице b размером NxM.
Тогда bi,j=min(bi-1,j,bi,j-1)+ai,j (
здесь a - таблица из условия). Применить эту формулу не составляет труда,
если bi-1,j и bi,j-1 уже
посчитаны. А это легко достигается, если заполнять таблицу b слева
направо сверху вниз (т.е. сначала слева направо заполняется первая
строка, затем вторая и т.д.).
Заметим, что для первой строки и первого
столбца формула работает плохо, т.к. там появляются несуществующие
элементы таблицы.
Их можно заполнить в самом начале, поскольку в каждую из этих клеток
можно попасть только одним способом.
Ответ на поставленную
задачу будет находиться в правом нижнем углу таблицы b.
Количество действий, выполненных этим алгоритмом, пропорционально числу клеток в таблице.
|