24_packagegroups.py 682 B

12345678910111213141516171819202122
  1. #!/usr/bin/env python3
  2. import sys
  3. from operator import mul
  4. from functools import reduce
  5. def groups_with_sum(l, s):
  6. worklist = [(s, [], sorted(l))]
  7. while worklist:
  8. remain, group, picks = worklist.pop()
  9. for i, pick in enumerate(picks):
  10. if pick == remain:
  11. yield group + [pick]
  12. elif pick < remain:
  13. worklist.append((remain - pick, group + [pick], picks[i + 1:]))
  14. def min_qe(weights, ngroups):
  15. groups = groups_with_sum(weights, sum(weights) // ngroups)
  16. return min((len(g), reduce(mul, g)) for g in groups)[1]
  17. weights = list(map(int, sys.stdin))
  18. print(min_qe(weights, 3))
  19. print(min_qe(weights, 4))