Содержание
- 2. Что такое ДП? Динамическое программирование – это когда у нас есть задача, которую непонятно как решать,
- 3. Представление ДП ДП представляют в виде набора состояний. Каждое состояние имеет параметры. Каждому набору параметров соответствует
- 4. Задача 1 Дано число N требуется вычислить N-е число Фибоначчи. По определению f(N) = f(N –
- 5. Реализация Ленивая динамика Прямой пересчёт Обратный пересчёт
- 6. Задача 2? Есть лестница длиной N ступенек. За 1 шаг вы можете подняться на 1 или
- 7. Задача 2 Есть лестница длиной N ступенек, на каждой ступеньке написано положительное число Ak. За 1
- 8. Задача о рюкзаке Есть рюкзак объёмом V и N предметов, каждый из которых имеет объём Ai.
- 9. Задача о рюкзаке Создадим матрицу dp[N + 1][V + 1]. Пусть изначально её элементы равны 0,
- 10. Переход: dp[i][j] = max(dp[i – 1][j], dp[i – 1][j – Ai]) Задача о рюкзаке. Шаг 1
- 11. Переход: dp[i][j] = max(dp[i – 1][j], dp[i – 1][j – Ai]) Задача о рюкзаке. Шаг 2
- 12. Переход: dp[i][j] = max(dp[i – 1][j], dp[i – 1][j – Ai]) Задача о рюкзаке. Шаг 3
- 13. Переход: dp[i][j] = max(dp[i – 1][j], dp[i – 1][j – Ai]) Задача о рюкзаке. Шаг 4
- 14. Переход: dp[i][j] = max(dp[i – 1][j], dp[i – 1][j – Ai]) Задача о рюкзаке. Шаг 8
- 15. Переход: dp[i][j] = max(dp[i – 1][j], dp[i – 1][j – Ai]) Задача о рюкзаке. Шаг 9
- 16. Переход: dp[i][j] = max(dp[i – 1][j], dp[i – 1][j – Ai]) Задача о рюкзаке. Шаг 10
- 17. Переход: dp[i][j] = max(dp[i – 1][j], dp[i – 1][j – Ai]) Задача о рюкзаке. Шаг 11
- 18. Переход: dp[i][j] = max(dp[i – 1][j], dp[i – 1][j – Ai]) Задача о рюкзаке. Шаг 12
- 19. Переход: dp[i][j] = max(dp[i – 1][j], dp[i – 1][j – Ai]) Задача о рюкзаке. Шаг 13
- 20. Переход: dp[i][j] = max(dp[i – 1][j], dp[i – 1][j – Ai]) Задача о рюкзаке. Шаг 14
- 21. Переход: dp[i][j] = max(dp[i – 1][j], dp[i – 1][j – Ai]) Задача о рюкзаке. Шаг 15
- 22. Переход: dp[i][j] = max(dp[i – 1][j], dp[i – 1][j – Ai]) Задача о рюкзаке. Шаг 16
- 23. Переход: dp[i][j] = max(dp[i – 1][j], dp[i – 1][j – Ai]) Задача о рюкзаке. Шаг 17
- 24. Переход: dp[i][j] = max(dp[i – 1][j], dp[i – 1][j – Ai]) Задача о рюкзаке. Шаг 18
- 25. Переход: dp[i][j] = max(dp[i – 1][j], dp[i – 1][j – Ai]) Задача о рюкзаке. Шаг 19
- 26. Переход: dp[i][j] = max(dp[i – 1][j], dp[i – 1][j – Ai]) Задача о рюкзаке. Шаг 20
- 27. Переход: dp[i][j] = max(dp[i – 1][j], dp[i – 1][j – Ai]) Задача о рюкзаке. Шаг 21
- 28. Переход: dp[i][j] = max(dp[i – 1][j], dp[i – 1][j – Ai]) Задача о рюкзаке. Шаг 22
- 29. Ответ: 6 Задача о рюкзаке. Итоговая матрица
- 30. Задача о рюкзаке. Оптимизация Базовый алгоритм имеет асимптотику O(N*V) и требует N*V памяти. Однако, можно заметить,
- 31. Оптимизированный рюкзак с повторениями Заметим, что если мы будем перебирать j от 0 до V, то
- 33. Скачать презентацию