在编写代码时,我发现了以下问题,以简单的方式说明:
在数组 A 和 B 中对一个浮点数组 X 进行分区,以便 A中值的总和之差和 B 的值之和最小化
这是我正在进行的调查的一部分,但我找不到有效执行此操作的方法。
修改
要回答那些认为这是来自PE,SPOJ或家庭作业等数学竞赛的人,事实并非如此。当我试图在一系列因子 a 和 b 中对已经分解的数字 p 进行分区时,我对此有好奇心,这样b =一个+ 1。如果我们从两边采集日志,我们可以证明这个问题相当于最小化总和的差异,但这就是我遇到的问题。
答案 0 :(得分:3)
只是第一个简单的想法。使用动态编程方法。
我认为这个问题可以转化为背包问题。您需要从X
中选择项目(这将有数组A
)以最大化总和但不超过(sumX - sumA)
值(数组{{1}中的项目总和}})。对于通过动态编程方法解决背包问题的算法,请查看wiki例如
这个解决方案可能是错误的,顺便说一句......但即使它能够工作,我也更确信存在更高效,更优雅和更短的解决方案。