当我和别人分享巧克力时,突然蹦出一个想法。我在想是否存在一个通用算法来解决这个问题。
问题是这样的: 信息
1. 你有一块由小正方形排列成矩形状的巧克力
2. 房间里有n个人 问题
编写一个算法,输出最佳配置(p x q),其中棒可以在给定以下限制的情况下平均分配给
1.小正方形(单位正方形)不能被切成更小的碎片
2.所有断裂必须完全沿着一个轴进行
3.断裂的总数不能超过n(这是为了防止低效的解决方案,例如试图将整个棒分成小块并将小块分开)
4.p或q不能等于1。yx在其中一个答案中指出,如果一侧有1根棒,则问题很容易解决。然而,这不是解决这个问题的好方法,因为这是解决实际问题的意图 :)
例子
对于n = 4,最佳配置是4 x 3。
问题是这样的: 信息
1. 你有一块由小正方形排列成矩形状的巧克力
2. 房间里有n个人 问题
编写一个算法,输出最佳配置(p x q),其中棒可以在给定以下限制的情况下平均分配给
n、n-1、n-2....、2、1
人:1.小正方形(单位正方形)不能被切成更小的碎片
2.所有断裂必须完全沿着一个轴进行
3.断裂的总数不能超过n(这是为了防止低效的解决方案,例如试图将整个棒分成小块并将小块分开)
4.p或q不能等于1。yx在其中一个答案中指出,如果一侧有1根棒,则问题很容易解决。然而,这不是解决这个问题的好方法,因为这是解决实际问题的意图 :)
例子
对于n = 4,最佳配置是4 x 3。
~~~~ ~~~~ ~~~~ ~~~~
| | | | |
~~~~ ~~~~ ~~~~ ~~~~
| | | | |
~~~~ ~~~~ ~~~~ ~~~~
| | | | |
~~~~ ~~~~ ~~~~ ~~~~
此配置可分为:
纵轴上有3个断点的4人组
横轴上有2个断点的3人组
中间有1个断点的2人组
其他经验解决方案为(n, p, q) = (1, 1, 1); (2, 2, 1); (3, 3, 2); (4, 4, 3); (5, 5, 12); (6, 6, 10) 或 (6, 5, 12)
澄清
如果适用,断点被定义为对巧克力条子集沿一轴进行的切割。为了更好地说明这一点,假设你有一个2 x 2的巧克力条如下:
~~~~ ~~~~
| | |
~~~~ ~~~~
| | |
~~~~ ~~~~
传统智慧认为,你需要在中间做两个断口(垂直交叉的轴线),将这根棒子分成4块。然而,在现实世界中(如果它是一根巧克力棒),你首先会把它对半断开,然后再分别断开每一半。总共需要3个断口-整根棒子一个断口,以及在两个不同的子集上各自断口。
我在互联网上找不到解决方案-如果有人觉得这不是与编程相关的问题或者已经存在解决方案,请随意关闭这个问题=)