2016-10-01 2 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]) 대신 312의 입력으로서 3 1 및 복용된다.
대신 list(map(int, input().split()))을 사용해야하고 a[0]a[1]을 얻어야합니다.

관련 문제