我一直在尝试将一个数组划分为两个非空的不相交子集,以使它们的总和相等。
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 的学习阶段。我觉得有点困难。有人可以帮我找出我当前算法中的错误吗?