部分和問題を調べる必要があります。あなたの場合、S/2 のサブセットの合計を求めています。ここで、S は完全な合計です。最もよく知られている整数の場合にそれを行う単純な動的計画法アルゴリズムがあります。残念ながら、これは疑似多項式時間です。これは、実行時間が要素のサイズの多項式であることを意味します。これにより、通常の意味では指数関数的な時間になりますが、要素が大きすぎない場合は問題なく機能します。
サブセット合計動的プログラムは、正確に N 個の要素 e[i] の要件を強制するために少し変更する必要があります。Q(i, s, n) は、1 から i までの合計で s になる要素から選択され、正確に n<=i 要素を含むサブセットが存在する場合に真とします。
それで
Q(i, s, n) = Q(i - 1, s, n) または Q(i - 1, s - e[i], n - 1)
基本ケースでは、要素をまったく使用しない場合、サブセット内の合計と必要な数は両方ともゼロでなければならず、そうでない場合、Q は false になります。
Q(0, 0, 0) = true、それ以外の場合 Q(0, _, _) は false。
答えを得るには、真の値が見つかるまで、Q(2N, k, N)、k = 天井 (S/2)、天井 (S/2)-1、... の DP テーブルを計算します。
この問題はサブセット和に十分近いため、NP 困難になることに注意してください。これは、真の多項式時間アルゴリズム (並べ替えの提案など) が最適性の近似値になることを意味します。もちろん、現実的な目的にはそれで十分かもしれません。