#python #function #knapsack-problem
#python #функция #рюкзак -проблема
Вопрос:
def knapSack(cap, wt, val, n, stuff):
# initial conditions
items_to_pack=[]
if n == 0 or cap == 0 :
return 0
# If weight is higher than capacity then it is not included
if (wt[n-1] > cap):
return knapSack(cap, wt, val, n-1, stuff)
# return either nth item being included or not
else:
items_to_pack.append(stuff[n-1])
return max(val[n-1] knapSack(cap-wt[n-1], wt, val, n-1, stuff),
knapSack(cap, wt, val, n-1, stuff))
return print(items_to_pack)
# To test above function
items = (
("Item 1", 9, 20), ("Item 2", 1, 1), ("Item 3", 5, 11), ("Item 4", 4, 10)
)
cap = 10
val=[]
wt=[]
thing=[]
for i in range(len(items)):
val.append(items[i][2])
for i in range(len(items)):
wt.append(items[i][1])
for i in range(len(items)):
thing.append(items[i][0])
n = len(val)
print ('items_topack:', knapSack(cap, wt, val, n, thing))
Работает функция рюкзака, которая выводит максимальное значение и предметы, упакованные в сумку.
Первая проблема исправлена, но теперь она выводит только максимальное значение, а не предоставляет предметы, упакованные в сумку.
Любой совет?
Комментарии:
1. Вам не хватает аргумента, если вы их считаете.
knapsack
принимает пять аргументов, ноknapSack(cap-wt[n-1], wt, val, n-1)
передает только четыре.2. Итак, исправлено, но это только вводит максимальное значение для предметов, упакованных в сумку?
3. Что именно вы ожидаете
return print(items_to_pack)
сделать?4. Я ожидаю, что «items_to_pack.append (stuff[n-1])» добавит используемый элемент в список item_to_pack, а затем я пытаюсь использовать «return print (items_to_pack» для печати списка упакованных элементов