一个随机的想法突然出现在我的脑海中(当然是在我分享巧克力棒的时候!)。我想知道是否有通用算法来解决这个问题。
问题是这样的:
信息
1. 你有一块巧克力棒,上面有排列成矩形矩阵的小方块
2. 房间里有 n 个人
问题编写一个算法,输出最优配置 (pxq),其中在以下限制
条件下,条形可以在人们之间平均共享:
1. 不能将小方块(单位方块)切割成更小的部分2. 所有休息都必须是完全沿一个轴进行3. 断裂的总数不能超过 n (这是为了阻止低效的解决方案,例如尝试将整个杆分成小块并将小块分成小块)4. p 或 q 不能相等to 1. yx 在其中一个答案中指出,如果一侧有 1 bar,则问题很容易解决。然而,这对于现实世界的情况来说并不是一个好的解决方案——这是解决这个问题的目的:)示例n, n-1, n-2...., 2, 1
对于 n = 4,最佳配置是 4 x 3。
~~~~ ~~~~ ~~~~ ~~~~
| | | | |
~~~~ ~~~~ ~~~~ ~~~~
| | | | |
~~~~ ~~~~ ~~~~ ~~~~
| | | | |
~~~~ ~~~~ ~~~~ ~~~~
这种配置可以分为:
4 人在沿垂直轴的
3 个休息时间 3 人在水平轴上有 2 个休息时间2
人在中间有 1 个休息时间
其他经验解决方案是栏的子集(如果适用)。为了更好地说明这一点,假设您有一个像这样的 2 x 2 巧克力棒:(n, p, q) = (1, 1, 1); (2, 2, 1); (3, 3, 2); (4, 4, 3); (5, 5, 12); (6, 6, 10) OR (6, 5, 12)
~~~~ ~~~~
| | |
~~~~ ~~~~
| | |
~~~~ ~~~~
传统观点认为,您需要进行 2 次中断(中间的垂直轴 - 向下和交叉)才能将此条分成 4 块。然而,在现实世界中(如果它是一块巧克力棒),你会先把它分成两半,然后再分别分开每一半。这使得总共 3 次休息 - 1 次休息在整个酒吧和 2 次休息在酒吧的 2 个不同的子组。
我在互联网上的任何地方都找不到解决方案 - 如果有人认为这不是与编程相关的问题或解决方案已经存在,请随时关闭问题 =)