Split a set of numbers into 2 sets, where the sum of each set is as close to one another as possible Given a finite set $P = \{ p_1, \dots, p_n \} $ of integers, I'd like to split it into two subsets $A = \{ a_1, \dots, a_m \} \subseteq P$ and $B = \{ b_1, \dots, b_r \} \subseteq P$, where $m + r = n$, and, for each subset, the sum of the numbers is as close as possible to half the total of the sum of the numbers in $P$. More precisely, we have the following constraints
$$\sum_i^m a_i \leq \left \lceil \frac{\sum_j^n p_j}{2} \right \rceil $$
and
$$\sum_i^r b_i \leq \left \lceil \frac{\sum_j^n p_j}{2} \right \rceil $$
and 
$$\sum_i^m a_i + \sum_i^r b_i \leq \sum_j^n p_j $$
How would I go about doing this in a programmatic way?

http://en.wikipedia.org/wiki/Partition_problem
