【发布时间】:2015-09-25 21:40:12
【问题描述】:
我正在研究 DP,当我阅读平衡分区算法时,我遇到了这个问题。在这个算法中,我们可以将一个列表分成两个列表,使得这些列表的元素之和相等。但是,如果我需要 K 个列表并且我需要它们的总和最少怎么办?我想修改平衡分区算法来解决这个问题,但我实际上看不到这样做的方法。
令 S 为 {1,1,5},K = 2 的最优解为 {1,1}, {5}。
有什么提示吗? 提前致谢。
【问题讨论】:
-
也许我错过了一些东西,但不是
{1,1} = 2的总和和{5} = 5的总和,因此不相等? -
@SethKitchen 你用过 5 两次。
-
另外集合不能包含重复项,因此示例无效。
-
什么?如果我声明一套袜子。我有 3 只绿色袜子和 3 只蓝色袜子,套装是 {3,3}
-
是的...主要问题是如何将一个集合划分为 K 个子集,使这些子集中的元素总和最小。我提到了平衡分区算法,因为它做了一些接近它的事情。我给出的示例旨在解释主要问题的解决方案,而不是举例说明平衡分区(在这种情况下,是的,因为 2 != 5 找不到解决方案)。
标签: c++ algorithm dynamic-programming greedy