如何将一个集合分成K个子集,使得子集中元素的和最小
How to divide a set into K subsets such that the sum of the elements in the subsets are minimal?
我正在学习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
在您的示例(K=2)中,这会将5
放入第一个分区,将1
s放入第二个分区。
相关文章:
- 如何从存储在std::映射中的std::集中删除元素
- 在std::集中获取与给定元素最接近的元素
- 如何查看提升集中<cpp_int>的下一个和上一个元素
- 如何有效地从C++集中删除开始和结束元素
- 如何在 c++ 集中插入元素,直到按下 Enter 键
- 如何检查 O(N) 时间复杂度的多重集中是否有 2 个或更多元素具有相同的值
- 如何在C++中减少多集中元素的数量
- 指针集中元素的顺序
- 从C 中的2D集中删除元素
- 更改STL多集中两个相等元素的顺序
- 如何有效地从std::集中选择随机元素
- 如何遍历两对 STL 集中的所有元素<对<t1,t2>,pair<t1,t2>>?
- 多集是如何工作的,以及如何在多集中找到最小元素
- 如何使迭代器指向与C++集中的另一个元素相同的元素
- 获取C++多集中的前N个元素
- 将连字符作为元素包含在scanf()的扫描集中,如果它是列表中的第一个字符或最后一个字符
- 为什么我不能在 STL 集中插入 600 万个元素?
- 在并集中命名数组元素或结构和数组
- 如何将数组的元素分配给 x86 程序集中的变量
- C++lambda从向量集中移除元素