fork download
  1. N = int(read_line()) # number of elements
  2. s = map(int, read_line().split()) # array of values
  3. R = int(read_line()) # maximum sum of the subset
  4.  
  5. W = [[0 for r in range(R+1)] for i in range(N)] # subset 1
  6. H = [[0 for r in range(R+1)] for i in range(N+1)] # subset 2
  7.  
  8. for i in range(N):
  9. for r in range(R+1):
  10. if i > 0 and W[i-1][r] > 0:
  11. W[i][r] = W[i-1][r]
  12. if r >= s[i] and W[i-1][r-s[i]] > 0:
  13. W[i][r] = set_bit(W[i-1][r-s[i]], i)
  14. if r == s[i]:
  15. W[i][r] = set_bit(0, i)
  16.  
  17. j = N - i - 1
  18. if H[j+1][r] > 0:
  19. H[j][r] = H[j+1][r]
  20. if r >= s[j] and H[j+1][r-s[j]] > 0:
  21. H[j][r] = set_bit(H[j+1][r-s[j]], j)
  22. if r == s[j]:
  23. H[j][r] = set_bit(0, j)
  24.  
  25. # find and output results
  26. for i in xrange(N):
  27. for j in xrange(i+1, N):
  28. for ri in xrange(1, R+1):
  29. for rj in xrange(1, R+1):
  30. w = W[i][ri]
  31. h = H[j][rj]
  32. if w > 0 and h > 0:
  33. for t in range(N):
  34. if test_bit(w, t) > 0:
  35. print s[t],
  36. print '->',
  37. for t in range(N):
  38. if test_bit(h, t) > 0:
  39. print s[t],
  40. print
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty