我需要一种算法将值列表分成这样的 block ,每个 block 中的值总和(大约)等于(我想它是 Knapsack problem 的一些变体)
因此,例如 [1, 2, 1, 4, 10, 3, 8] => [[8, 2], [10], [1, 3, 1, 4]]
首选等长 block ,但这不是限制条件。
Python 是首选语言,但也欢迎使用其他语言
编辑: block 数已定义
最佳答案
贪心:
1. 将可用的项目降序排列。
2.创建N个空组
3. 开始将项目一次一个地添加到总和最小的组中。
我认为在大多数现实生活中这应该足够了。
关于python - 以平衡权重的 block 拆分列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6855394/