这段代码是解决子集求和问题变体的函数,但我真的不明白它是如何得到答案的。
该函数返回最接近该值的子集和,如果它与该值相同,那么它只返回该值,如果两个子集的总和等于该值,则返回更大的和。
这就是它
2*value+1
我理解标准内容,但我不知道循环中是什么。
我的主要问题是
为什么需要一组apply
个集合?
循环中是怎么回事?
答案 0 :(得分:3)
不知何故,你问题中的代码是实现此算法的这个(我的 1 )answer的精确副本。我同意算法本身并不新鲜,但代码结构和变量都表示复制。如果您仔细阅读了问题(和答案),您可能会发现正在解决的问题是最接近的子集求和问题。这意味着如果不能构造这样的集合,则返回具有最小差异的集合。
现在因为这样的集合可以更大所需的总和,你需要最多 2 K + 1 集合 K 所需的数量,因为您的集合中最小的数字可能是 K-1 。比如说,给定的数字是{2,5,8,10}
,并且您希望构建6
的子集,而不是最近的子集和是{2,5}
。您需要足够的“集合”来存储可能更大的子集。
循环中发生的事情在链接的答案中解释。
1 谁写的答案是无关紧要的,但是更容易发现自己的工作。