fork download
  1. # your code goes here
  2.  
  3. table=[0]*1001 # to store result
  4.  
  5.  
  6. def close(a,b,c):
  7. if abs(a-c)<abs(b-c): # to decide which number is closer to required number
  8. return a
  9. return b
  10.  
  11.  
  12. def pay(length,k,m):
  13.  
  14. if k<=0 or k>m:
  15. return 0
  16.  
  17. if table[k]!=0:
  18. return table[k]
  19.  
  20. elif k in length:
  21. return k
  22.  
  23. for i in range(len(length)):
  24. l=length[0:i]+length[i+1:] #remove the element which is added
  25. # print(l)
  26. table[k]=close(table[k],length[i]+pay(l,k-length[i],m),k) #eg.element + value-element
  27. if table[k]==m:
  28. return m
  29.  
  30. return table[k]
  31.  
  32.  
  33. for _ in range(int(input())):
  34. nums,m=map(int,input().split())
  35. lst=[]
  36. for o in range(nums):
  37. lst.append(int(input()))
  38. print("************")
  39. print(pay(lst,m,m))
  40.  
  41.  
Success #stdin #stdout 0.02s 9572KB
stdin
5
3 3
1
1
1
5 11
1
2
4
8
16
5 23
1
2
4
8
16
5 13
1
5
5
10
10
20 132
17
6
4
998
254
137
259
153
154
3
28
19
123
542
857
23
687
35
99
999
stdout
************
3
************
11
************
23
************
13
************
132