有n
(n < 1000
)个朋友组,其中组的大小由数组A[]
(2 <= A[i] < 1000
)表征。存在表格,使得它们一次可以容纳r(r>2)
个人。每个人座位所需的最小桌面数是多少,但要受到限制,每个人应该有一个坐在他/她桌旁的小组中的另一个人。
我想的方法是将每个小组分成三三两两的大小并尝试解决这个问题,但是有很多种方法可以将数字n
分成三三两组而不是全部它们可能是最佳的。
答案 0 :(得分:2)
混合整数编程模型是否计数?
关于这个表述的一些注释:
答案 1 :(得分:1)
与NP完成的背包问题相同(参见https://en.wikipedia.org/wiki/Bin_packing_problem)。因此找到最佳解决方案非常困难。
大部分时间都有效的启发式方法:
根据尺寸减小对组进行排序。
对于每个组,将其放在占空间最小的表中,但仍可以容纳此组。
答案 2 :(得分:0)
您的方法是可行的。如果对于给定数量的表存在解决方案,则存在一种解决方案,其中您将每个组拆分为若干个二进制数和一些数量的三个。首先,将每组奇数的三个分开。你留下了一堆规模均匀的群体。接下来,将每个大小不能被6整除的组分开两次。忘记它是一个更大的群体;把它分成几组六个。
此时,您已将所有群组分成两个数量,一些数量的三个,以及一些数量的六个。给每个奇数大小的表一个三,根据需要拆分六个;现在所有表都有均匀的大小。所有剩下的六个人现在可以分成两个人并随意坐着。