Мой код рюкзака выдает неверный вывод?

#python #algorithm #python-3.x #knapsack-problem

#питон #алгоритм #python-3.x #рюкзак-проблема #python

Вопрос:

Я пытался написать простую задачу с рюкзаком 0-1, но столкнулся с некоторой ошибкой. Помощь была бы признательна.

 T = int(input().strip())
def knapsack(n,k,ar):
    if n==0 or k==0:
        return 0
    elif ar[n-1]>k:
        return knapsack(n-1,k,ar)
    else:
        return max(knapsack(n-1,k,ar),ar[n-1]   knapsack(n-1,k-ar[n-1],ar))
for t in range(T):
    a = input().strip()
    n,k = int(a[0]),int(a[2])
    ar = [int(i) for i in input().strip().split(' ')]
    print(knapsack(n,k,ar))
  

Я запустил это снова ввод

 2
3 12
1 6 9
5 9
3 4 4 4 8
  

и я получаю неверный вывод? Я не могу найти никакой ошибки. Заранее спасибо

Выходной сигнал

 1
8
  

Ответ №1:

Ваш алгоритм в порядке, но ваш ввод в функцию неверен.

В первом вводе строка n,k = int(a[0]),int(a[2]) принимает 3 и 1 в качестве входных данных вместо 3 и 12 .
Я думаю, вам следует использовать list(map(int, input().split())) вместо этого и получить a[0] и a[1] .