问题描述
我在一栋建筑物中有6排21张椅子,还有一个预订系统,可以预订不同规模的团体,每组之间需要2张椅子,以实现社会疏远目的。我们希望容纳尽可能多的人,但要保持公平,因此,较晚预订的较小团体不会破坏早先预订的较大团体。他们不必按时间顺序就座。最后,虽然尝试预订一个以上的人可能会因为没有足够的空间容纳他们而被合理地拒绝,但如果合适的话,可以接受一次预订。
我几乎达到了上述所有目的,但还不完全是...这就是我的过程的工作方式(我可以在此处添加很多代码,但是我并不是很在意代码,而是需要解释如何处理)。我不太了解的变化。我希望可以):
-
按时间顺序订购到目前为止的预订
-
从21开始逐行浏览
-
对于每次预订,请检查团体人数是否+ 2适合。如果是这样,请将其添加到该行数组中,将它们从预订数组中删除,并将剩余的席位减少2个组的大小。执行此操作,直到该行没有剩余的预订为止。
-
如果剩余席位为0,则该行的末尾将有2个不必要的“缓冲”席位,但即使是1人的团体,其与前一组之间也无法容纳2套,因此忽略这个事实,继续前进。
-
如果剩余座位数超过0,请再次进行剩余预订,然后看看是否有任何组都适合,而无需添加2个座位缓冲区。如果是这样,请将其添加到行数组中,将它们从预订数组中删除,并打破循环并移至下一行。
希望您可以在那儿遵循我的逻辑。它确实工作得很好,但是并没有以最有效的方式填充行。不必按时间顺序排列预订,但是我们不能事先预订较小的,较新的预订来取消预订,因为它们可以高效地匹配。
有人有什么需要照亮的吗?我的大脑在融化!
解决方法
由于添加小组要比添加大组容易,因此应首先将大组放置。
假设情况是这样的:您当前有一个适合的组列表。突然,一个新的G组尝试预订。尝试通过按大小对所有组进行排序,然后将最大的组放在第一,最后的最小组来适应新的组。如果这项工作有效,请接受带有新展示位置的G的新预订。但是,如果这导致较早的组不再适合,则拒绝新的组G并保留原来的位置。
当由于无法容纳某个组而拒绝该组时,您也可以将该组的大小保留在内存中;下次当一组相同大小或更大型的书籍尝试预订时,您可以立即拒绝它们,因为您知道自己无法容纳这个数目。