Функция рюкзака Python, отсутствующий аргумент

#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» для печати списка упакованных элементов