Слайд 1Олимпиадные задачи
Динамическое программирование
Григорьева А.В.
Слайд 2Задача «Возрастающая подпоследовательность» № 613
Слайд 6Сдать можно как задачу №613
http://informatics.mccme.ru/mod/statements/view3.php?chapterid=613#1
Слайд 10Второй способ
С диагоналями. Нужен, чтобы хранить не 3 строки одной
таблицы (B), а по две строки трех таблиц (L, R,
B)
Слайд 11L
R
B
Что должно
получиться
Первую строку заполняем первой строкой из А
Заполняем вторую
строку B по-честному
Слайд 12L
R
B
Что должно
получиться
Первую строку заполняем первой строкой из А
Заполняем вторую
строку B по-честному
Слайд 13L
R
B
Что должно
получиться
Теперь можно и третью строку В заполнить
B[i, j]
= 2*B[i-1,j] + L[i-1,j-1] + R[i-1,j+1]
L[i, j] = L[i-1,j-1] +
B[i,j]
R[i, j] = R[i-1,j+1] + B[i,j]
Заполняем вторую строку L и R по формулам
Слайд 14L
R
B
Что должно
получиться
B[i, j] = 2*B[i-1,j] + L[i-1,j-1] + R[i-1,j+1]
L[i,
j] = L[i-1,j-1] + B[i,j]
R[i, j] = R[i-1,j+1] + B[i,j]
Теперь
можно и третью строку В заполнить
Слайд 15L
R
B
Что должно
получиться
B[i, j] = 2*B[i-1,j] + L[i-1,j-1] + R[i-1,j+1]
L[i,
j] = L[i-1,j-1] + B[i,j]
R[i, j] = R[i-1,j+1] + B[i,j]
Теперь
можно и третью строку В заполнить
Слайд 16L
R
B
Что должно
получиться
B[i, j] = 2*B[i-1,j] + L[i-1,j-1] + R[i-1,j+1]
L[i,
j] = L[i-1,j-1] + B[i,j]
R[i, j] = R[i-1,j+1] + B[i,j]
Теперь
можно и третью строку В заполнить
Слайд 17L
R
B
Что должно
получиться
Теперь можно и третью строку В заполнить
B[i, j]
= 2*B[i-1,j] + L[i-1,j-1] + R[i-1,j+1]
L[i, j] = L[i-1,j-1] +
B[i,j]
R[i, j] = R[i-1,j+1] + B[i,j]
Слайд 18L
R
B
Что должно
получиться
Далее заполняем по формулам третьи строки L и
R
B[i, j] = 2*B[i-1,j] + L[i-1,j-1] + R[i-1,j+1]
L[i, j] =
L[i-1,j-1] + B[i,j]
R[i, j] = R[i-1,j+1] + B[i,j]
Слайд 19L
R
B
Что должно
получиться
Далее заполняем по формулам третьи строки L и
R и т.д.
B[i, j] = 2*B[i-1,j] + L[i-1,j-1] + R[i-1,j+1]
L[i,
j] = L[i-1,j-1] + B[i,j]
R[i, j] = R[i-1,j+1] + B[i,j]
Слайд 20L
R
B
Что должно
получиться
Далее заполняем по формулам третьи строки L и
R и т.д.
B[i, j] = 2*B[i-1,j] + L[i-1,j-1] + R[i-1,j+1]
L[i,
j] = L[i-1,j-1] + B[i,j]
R[i, j] = R[i-1,j+1] + B[i,j]
Слайд 22Решение задачи «Черепашка». П.П.
Полный перебор вариантов – универсальный способ решения.
Но рассмотрим его потенциальные возможности
Пусть дана таблица 4х4. Любой путь
состоит из трёх перемещений вверх и трех перемещений вправо, т.е. длина пути равна шести. Другими словами, дано 6 шагов, из них 3 выбираются для перемещений вверх, оставшиеся 3 – для перемещений вправо определяются однозначно. Т.о. количество способов выбора трех перемещений из шести
При нахождении суммы (стоимости) пути потребуется 5 операци сложения, всего 100 операций. Оценим время решения задачи для компьютера с миллионным быстродействием (см. презентация предыдущих занятий о сложности алгоритмов и быстродействии на примере задачи о тупоугольном треугольнике)
Слайд 24Решение задачи «Черепашка». Д.П.
Слайд 28Сдать можно как задачу №2965
Там даже не требуется вывести путь
И
идет черепашка в другом направлении
http://informatics.mccme.ru/mod/statements/view3.php?id=656&chapterid=2965#1
Слайд 29Задача №619 с восстановлением пути
Для считывания на С++ в ней
удобно хранить массив из char и получать цифру, вычитая код
символа ‘0’. Он равен 48, но можно написать прямо так:
Как видим, не забыли привести к int полученый код.
Слайд 30Рюкзак
Рюкзак без стоимости (камни) № 1119
Рюкзак с фиксированным набором вещей
№ 3089
Рюкзак с выводом № 3090
Слайд 31Задача по ДП про штрафу при удалении
Слайд 32Её разбор тут
https://youtu.be/pq4pA8PzP5w
Слайд 33Копилка (размен, банкомат) № 625
Задан вес E пустой копилки и
вес F копилки с монетами. В копилке могут находиться монеты
N видов, для каждого вида известна ценность Pi и вес Wi одной монеты. Найти минимальную и максимальную суммы денег, которые могут находиться в копилке.