我有一个现实世界的问题(不是家庭作业!),需要找到集合 A 的子集的总和,它等于其他集合 B 的子集的总和。
一个非常相似的问题有一个有用的答案是here。
考虑这个例子:
@a = qw(200 2000 2000 2000 4000);
@b = qw(528 565 800 1435 2000 2000 2872);
使用该问题的已接受答案中提供的代码,我得到以下输出:
sum(200 2000 4000) = sum(528 800 2000 2872)
sum(200 4000 4000) = sum(528 800 2000 2000 2872)
sum(200 4000) = sum(528 800 2872)
sum(200 2000 2000 2000 4000) = sum(528 800 2000 2000 2000 2872)
出于我的目的,我只想要使用输入集中元素最少的答案。在这个例子中,我只想
sum(200 4000) = sum(528 800 2872)
因为所有其他答案也有200
和4000
。也就是说,我正在寻找“最简单”的可能总和(从某种意义上说,它们使用最少的元素)。有人可以提出一种合理有效的方法吗?(蛮力是可以的,因为我的阵列不是那么大。)
另外,我应该注意输出的第二行sum(200 4000 4000) ...
, 是不正确的,因为4000
只在@a
. 恐怕我对算法的理解不够深入,无法理解为什么会发生这种情况。
任何对其中任何一个的帮助将不胜感激!