C++ 如何将一个集合划分为K个子集,使子集中的元素之和最小?

C++ 如何将一个集合划分为K个子集,使子集中的元素之和最小?,c++,algorithm,dynamic-programming,greedy,C++,Algorithm,Dynamic Programming,Greedy,我正在研究DP,当我阅读平衡分区算法时,这个问题出现了。在这个算法中,我们可以将一个列表分成两个列表,这样这些列表的元素之和就相等了。但是如果我需要K个列表,并且我需要它们有一个最小的和呢?我想修改平衡分区算法来解决这个问题,但实际上我找不到一种方法来解决这个问题 设S为{1,1,5},K=2的最优解为{1,1},{5} 有什么提示吗? 提前感谢。一个简单的算法是: sort S in descending order for each element in S: put it into

我正在研究DP,当我阅读平衡分区算法时,这个问题出现了。在这个算法中,我们可以将一个列表分成两个列表,这样这些列表的元素之和就相等了。但是如果我需要K个列表,并且我需要它们有一个最小的和呢?我想修改平衡分区算法来解决这个问题,但实际上我找不到一种方法来解决这个问题

设S为{1,1,5},K=2的最优解为{1,1},{5}

有什么提示吗?
提前感谢。

一个简单的算法是:

sort S in descending order
for each element in S:
    put it into the partition with the smallest sum

在您的示例中,这会将
5
放入第一个分区,将
1
s放入第二个分区(K=2)。

一个简单的算法是:

sort S in descending order
for each element in S:
    put it into the partition with the smallest sum

这将把
5
放在第一个分区中,把
1
放在第二个分区中(K=2)。

也许我遗漏了什么,但不是
{1,1}=2
{5}之和的总和=5,因此不相等?@SethKitchen您已经使用了5两次。而且集合不能包含重复项,因此示例无效。什么?如果我申报一套袜子。我有3个绿色的袜子和3个蓝色的袜子,集合是{3,3}是的…主要问题是如何将集合划分为K个子集,这样这些子集中的元素之和是最小的。我提到了平衡分区算法,因为它做了一些类似的事情。我给出的例子是为了解释主要问题的解决方案,而不是举例说明平衡分区(在这种情况下,是的,因为2!=5,所以找不到解决方案)。也许我遗漏了一些东西,但不是
{1,1}=2
{5}之和=5,因此不相等?@SethKitchen您已经使用了5两次。而且集合不能包含重复项,因此示例无效。什么?如果我申报一套袜子。我有3个绿色的袜子和3个蓝色的袜子,集合是{3,3}是的…主要问题是如何将集合划分为K个子集,这样这些子集中的元素之和是最小的。我提到了平衡分区算法,因为它做了一些类似的事情。我给出的示例旨在解释主要问题的解决方案,而不是举例说明平衡分区(在本例中,是的,因为2!=5,所以找不到解决方案)。