Я изучаю динамическое программирование, и у меня возникли проблемы с пониманием более сложных проблем. Когда возникает проблема, меня научили находить рекурсивный алгоритм, memoize рекурсивный алгоритм, а затем создать итеративную снизу вверх версию. На каждом шагу у меня проблема. В терминах рекурсивного алгоритма я пишу разные способы выполнения рекурсивных алгоритмов, но только один из них часто оптимален для использования в динамическом программировании, и я не могу отличить, какие аспекты рекурсивного алгоритма облегчают мемонирование. Что касается memoization, я не понимаю, какие значения использовать для индексов. Для преобразования в восходящую версию я не могу определить, какой заказ заполнить массив/двойной массив.Поиск максимальной подпоследовательности ниже или равный определенному значению
Это то, что я понимаю: - это должно быть возможно разделить основную задачу на подзадачи
В терминах задачи упоминалось, я придумал рекурсивный алгоритм, который имеет эти важные строки кода :
int optionOne = values[i] + find(values, i+1, limit - values[i]);
int optionTwo = find(values, i+1, limit);
Если я неясен или это не правильный сайт qa, дайте мне знать.
Редактировать:
Пример: Учитывая массив х: [4,5,6,9,11] и максимальное значение м: 20
Максимальная подпоследовательность х под или равна т будет [4 , 5,11] как 4 + 5 + 11 = 20
Лучше всего, если вы приведете пример, покажите нам, что именно вы подразумеваете под «максимальной подпоследовательностью ниже определенного значения». – Shashank
Я думаю, что проблема, которую вы описываете, - это проблема с рюкзаком 0-1, где значения равны массам. Решение динамического программирования приведено здесь.http: //en.wikipedia.org/wiki/Knapsack_problem –