Задачи динамического программирования на Питоне
python
def knapsack(n, W, wt, val):
#создаем таблицу размером (n+1) x (W+1)
K = [[0 for x in range(W+1)] for x in range(n+1)]
#заполняем таблицу
for i in range(n+1):
for j in range(W+1):
if i==0 or j==0:
K[i][j] = 0
elif wt[i-1] <= j:
K[i][j] = max(val[i-1] + K[i-1][j-wt[i-1]], K[i-1][j])
else:
K[i][j] = K[i-1][j]
return K[n][W]
#пример использования
n = 3 #количество предметов
W = 50 #вместимость рюкзака
val = [60, 100, 120] #стоимость предметов
wt = [10, 20, 30] #вес предметов
print(knapsack(n, W, wt, val)) #вывод максимальной стоимости предметов, которые можно уложить в рюкзак
В данном примере решение задачи о рюкзаке методом динамического программирования основывается на таблице K, которая заполняется по формуле K[i][j] = max(val[i-1] + K[i-1][j-wt[i-1]], K[i-1][j]) или K[i][j] = K[i-1][j], в зависимости от условия wt[i-1] <= j.
Таким образом, пример решения задачи о рюкзаке на языке Python показывает, что метод динамического программирования позволяет эффективно и правильно решать сложные оптимизационные задачи за приемлемое время с помощью рекурсивных отношений между решениями исходной и подзадач и таблицы, хранящей результаты вычислений.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет