Есть определенные правила, которым нужно следовать, найдите распорядок.
Что такое динамическое программирование.
Сколько способов попасть в правый нижний угол (это можно сделать только при динамическом программировании) Вывести все пути, ведущие в правый нижний угол (рекурсия dfs)
Классификация тем:
- считать Сколько способов попасть в правый нижний угол Сколькими способами можно выбрать K чисел так, чтобы сумма была равна сумме
- Найдите максимум и минимум Максимальное значение и сумма пути из левого нижнего угла в правый нижний угол самая длинная восходящая длина подпоследовательности
- искать существование В игре со сбором камней обязательно ли выиграет тот, кто сделает первый ход? Можем ли мы выбрать K чисел так, чтобы сумма была Sum
coin change
В наличии 3 монеты, номинал: 2 юаня, 5 юаней, 7 юаней, хватит на каждую монету
Купить книгу стоит 27 юаней.
Как расплатиться наименьшей комбинацией монет, чтобы другая сторона не просила денег (ищем максимальное и минимальное значения)
Забудьте о динамическом программировании: интуиция: Старайтесь использовать крупные монеты, если в итоге сможете расплатиться одной монетой.
Интуитивный ответ неверен.Динамическая 4-шаговая ходьба:
1. Определить состояние (Dinghaishenzhen)
-
Чтобы решить динамическое программирование, вам нужно открыть массив Что представляет каждый элемент массива f[i] или f[i][j]?
- Подобно решению математики, что представляют собой X, Y, Z (укажите)
-
Для определения состояния требуется два значения:
-
последний шаг
- Хотя я не знаю, какова оптимальная стратегия, оптимальной стратегией должно быть K монет a1, a2,....ak. Сумма номинала равна 27.
- Так что должна быть последняя монета :ak
- Уберите эту монету и номиналы предыдущих монет в сумме составят 27-ак
- Нам все равно, как на монете К-1 пишется 27-ak (может быть, 1 написание, может быть, 100 написаний), и мы даже не знаем сейчас ak и k, но мы уверены, что предыдущая монета пишется как Out of 27. -ak (последний шаг, определенный в неопределенности)
- Ключ: Потому что это оптимальная стратегия, потому что количество монет, на которых пишется 27-ак, должно быть наименьшим, иначе это не оптимальная стратегия.Независимо от последней монеты, написание оставшихся монет также является оптимальной стратегией .
-
Подвопрос:
- Следовательно, минимальное количество монет, используемых для написания 27-ak
- Первоначальный вопрос заключался в том, сколько монет нужно использовать, чтобы составить число 27.
- Преобразуем исходную задачу в подзадачу меньшего размера: 27-ak
- Чтобы упростить определение, мы установили f (X) = минимальное количество монет для написания X.
-
Даже проанализировав последний шаг и подзадачи, я до сих пор не знаю, что такое последняя монета.
-
Последняя монета ак может быть только 2,5,7
- Если ak=2, f(27)= должно быть f(27-2)+1
- Если ak=5, f(27)= должно быть f(27-5)+1
- Если ak=7, f(27)= должно быть f(27-7)+1
- Кроме этого, нет никакой другой возможности.
- Необходимое минимальное количество монет:
- f(27) = min{f(27-2)+1,f(27-5)+1,f(27-7)+1} +1
-
Рекурсивное решение:
Анализ рекурсивного алгоритма:
Феномен:- f(20) повторяется 3 раза
- f(15) повторяется дважды
результат:
Делается много избыточных повторных вычислений, что неэффективно.
Как этого избежать?
- сохранить результат расчета
- и изменить порядок вычислений.
2. Уравнение переноса
- Пусть состояние f[X] = минимальное количество монет для написания X (Квадратные скобки обозначают массивы)
- Для любого Х:
- На данный момент проблема динамического программирования наполовину решена.
3. Начальные условия и краевые задачи.
После определения уравнения переноса необходимо определить начальные условия и граничные задачи.
- f[27] = min{f[27-2]+1,f[27-5]+1,f[27-7]+1} +1
- Два вопроса: что делать, если X-2, X-5 или X-7 меньше 0. Когда остановиться?
- Если Y нельзя указать, определите f[Y] = положительная бесконечность
- Например, f[-1]=f[-2]=положительная бесконечность
- В реальной работе f[-1] не будет открываться.
- Таким образом, f[1]= min{f[-1]+1,f[-4]+1,f[-6]+1}= положительная бесконечность, что означает, что 1 нельзя написать по буквам
- Первоначальные условия:f[0] = 0
4. Определяем порядок расчета
- Начальное условие: f[0]= 0
- Затем вычислить f[1], f[2], f[3].... в порядке возрастания (обычно пошаговые вычисления)
- Преимущества: Но когда мы вычисляем f[X], f[X-2], f[X-5], f[X-7] уже получили результат,Избегайте двойного счета
временная сложность:
O(n)= n
Суммировать:
- Динамическое программирование предпочтительнее для поиска наиболее ценного типа.
- определить статус
- Последний шаг: последняя монета, используемая в оптимальной политике ak
- Преобразование в подзадачи: укажите наименьшее количество монет с меньшим номиналом 27-ak
- Определите уравнение переноса: f[X] = min{f[X-2]+1,f[X-5]+1,f[X-7]+1}+1
- Определить начальные условия и граничные случаи: f[0]=0, не могу разобрать, F[X] = положительная бесконечность
- Определяем порядок вычислений: f[0]-->f[1]-->f[2]....
Эксклюзивный мастер-код искусственного интеллекта My Didi Cloud: 3388, Введите мастер-код, чтобы получить скидку 10% при покупке продуктов AI, таких как Didi Cloud GPU. нажмитеwww.didiyun.comПерейдите на официальный сайт Didi Cloud, чтобы купить
Эта статья опубликована на многопостовой платформеArtiPubавтоматическая публикация