合計が等しくなるように、配列を2つの空でない互いに素なサブセットに分割しようとしています。
eg. A = {1,2,3,6,88,55,29}
one possible answer = 1+2+3 and 6
バランスの取れたパーティションの問題に関する mit チュートリアルを読みましたが、制約が異なります。セット A 全体を考慮する必要はありません (つまり、A1 U A2 が A になる必要はありません)。また、別の問題は N の制限です。それぞれ最大 100 の個別の要素 (<= 100 ) があります。私の問題に関連するこの 投稿
も読み ましたが、何も得られませんでした。
My present Algo --
p[1][a[0]] = 1
for i = 2 to n
for j = 0 to n*n
if( p[i][j] >= 2) stop
p[i][j] += j - a[i] > 0 ? ( p[i-1][j] + p[i-1][j-a[i]] ):0
p[i][j] += j == a[i] ? 1:0
p[i][j] += j < a[i] ? p[i-1][j]:0
説明 :
Search for sum j at position i. If we got count at position j >=2 means
there are more than two possibilities for summing up to j.
この方法ではばらばらなセットを処理できないことはわかっていますが、他のアプローチを見つけることはできません。
私はDynamic Progの学習段階にあります。と、やや難しいと思います。誰かが私の現在のアルゴリズムのエラーを見つけるのを手伝ってくれますか?