2016-10-01 84 views
1

我想寫一個簡單的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 

回答

2

你的算法是好的,但你輸入的功能是錯誤的。

在第一輸入,線n,k = int(a[0]),int(a[2])正在31作爲輸入,而不是312
我想你應該使用list(map(int, input().split()))來代替a[0]a[1]