最佳地安排一群人

Mic*_*ael 7 algorithm

我有这个家庭作业,我认为我设法解决了,但我不能完全确定,因为我不能证明我的解决方案.我想评论我做了什么,它的正确性以及是否有更好的解决方案.

问题是:我们N的人,其中组群i拥有g[i]人在里面.我们希望将这些人分别放在两排S座位上,这样:每个组只能以连续的顺序放在一行上,或者如果该组具有偶数个成员,我们可以将它们分成两列,将它们放在两行上,但条件是它们必须形成一个矩形(因此它们必须在两行上具有相同的索引).S所需的最小座位数是多少,以便没有人站起来?

示例:组是4 11.最低S11.我们将所有内容4放在一行中,然后11放在第二行中.另一个:团体6 2.我们拆分了6两行,还有两行.因此,最低4席位.

这就是我的想法:

计算T = (sum of all groups + 1) / 2.将组编号存储在一个数组中,但将所有偶数值拆分x为两个值x / 2.因此4 5变得2 2 5.现在在该向量上运行子集和,并找到高于或等于T可以形成的最小值.该值是每行所需的最小座位数.

示例:4 11 => 2 2 11 => T = (15 + 1) / 2 = 8.我们至少可以形成从2 2 11>= 8就是11,所以这就是答案.

这似乎有效,至少我找不到任何反例.我没有证据.直观地说,似乎总是可以根据该算法提供的座位数在所需条件下安排人员.

任何提示都表示赞赏.

Luc*_*ero 3

我认为你的解决方案是正确的。最佳分布中每排的最小座位数就是您的 T(这在数学上是显而易见的)。

分割偶数也是正确的,因为它们有两种可能的排列;通过逻辑地将所有“矩形”人群放在座位排的一端,您还可以保证他们始终形成正确的矩形,从而也满足此条件。

所以问题归结为找到一个等于或尽可能接近 T 的和(例如划分问题)。