Enumerate subsets and optimize a choice
Give every position one take-or-skip bit and evaluate each mask exactly once.
Understand the idea
For n positions, masks from 0 through 2^n − 1 describe every index subset. Bit i indicates whether position i is selected. To test a target sum or minimize a partition difference, scan selected positions and evaluate that candidate.
Trace a small example
For [−2, 3, 5], mask 101 selects −2 and 5, giving sum 3. Mask 010 also gives 3 but selects a different subset. For partitioning, if total is T and one selected side sums to S, the difference between the two sides is |T − 2S|.
Conditions and cost
A straightforward scan costs O(n × 2^n), so use small n and a shift width that contains 2^n. Include the empty subset if allowed. Negative values and zero need no special enumeration trick, but they invalidate some sum-based pruning rules.
How many index subsets does an array of four values have, including the empty subset?
Turn the idea into code
Find the minimum partition difference for [1, 2, 4].
Give me a hint
Try subset sums near half the total, 3.5.
Show the explained solution
Total is 7. Sums 3 and 4 are closest to half; both give difference 1. The partition {1, 2} and {4} achieves it.
Your notes
Mark complete when you can explain it yourself.