2016-10-01 3 views
1

Ich habe versucht, ein einfaches 0-1-Rucksack-Problem zu schreiben, aber es gibt einen Fehler. Hilfe wäre willkommen.Mein Rucksack Code gibt falsche Ausgabe?

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)) 

lief ich diesen wieder eine Eingabe von

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

und ich falsch Ausgang erhalte? Ich kann keinen Fehler finden. Vielen Dank im Voraus

Ausgabe

1 
8 

Antwort

2

Ihr Algorithmus ist in Ordnung, aber Ihre Eingabe für die Funktion ist falsch.

Im ersten Eingang die Leitung 3 und 1 als Eingang n,k = int(a[0]),int(a[2]) nimmt anstelle von 3 und 12.
Ich denke, Sie sollten stattdessen list(map(int, input().split())) verwenden und a[0] und a[1] erhalten.