一个随机的想法突然出现在我的脑海中(当然,当我分享一块巧克力的时候!)。我想知道是否有通用算法来解决这个问题。
问题是这样的:
信息
一。你有一块方格排列成长方形的巧克力棒
2.房间里有N个人
问题
编写一个算法,输出最优配置(p x q),在满足以下限制的情况下,n, n-1, n-2...., 2, 1人可以平等地共享条:
一。小正方形(单位正方形)不能切成小块。所有的断裂都必须沿着一个轴完成。中断的总数不能超过n(这是为了阻止无效的解决方案,例如尝试将整个条拆分为小块并将小块拆分)4。p或q不能等于1。yx在其中一个答案中指出,如果一边有1个bar,这个问题很容易解决。然而,这对于现实世界的情况不是一个好的解决方案-这就是解决这个问题的目的:)例如,对于n=4,最佳配置是4x 3。

 ~~~~ ~~~~ ~~~~ ~~~~
|    |    |    |    |
 ~~~~ ~~~~ ~~~~ ~~~~
|    |    |    |    |
 ~~~~ ~~~~ ~~~~ ~~~~
|    |    |    |    |
 ~~~~ ~~~~ ~~~~ ~~~~

这种结构可分为:沿垂直轴的3个断裂的4个人,沿着水平轴2个断裂的人,1个断裂,中间的其他经验解是(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 x 2的巧克力棒,如下所示:
 ~~~~ ~~~~
|    |    |
 ~~~~ ~~~~
|    |    |
 ~~~~ ~~~~

传统的观点认为,你需要做两次突破(垂直轴在中间向下和横向)把这个酒吧分成4块。然而,在现实世界中(如果是巧克力棒的话),你会先把它分成两半,然后再把每一半分开。这使得总共有3个中断-整个栏上有1个中断,在2个不同的子集上有2个中断。我在互联网上的任何地方都找不到解决方案。如果有人觉得这不是一个与编程有关的问题或者一个解决方案已经存在,请随时关闭问题=)。

最佳答案

在我看来,你要找的数字是可以被1到n之间的所有数字平均分割的。这被称为最小公倍数1,…,n,包含1个最小公倍数的方块,…,n个方块将按定义平均分为1个大小的块,…,n。
n=4的例子是lcm(4,3,2,1),它是12。lcm(5,4,3,2,1)为60。lcm(6,5,4,3,2,1)也是60。
它们总是可以按1xlcm(n,…,1)矩形布局,并且总是可以分成1,…,n个甚至n-1个或更少的分区的桩。
例如,当n=4时,lcm(4,3,2,1)=12。矩形是

############

可分为:
1: ############     // 0 cuts
2: ###### ######    // 1 cut
3: #### #### ####   // 2 cuts
4: ### ### ### ###  // 3 cuts (3 being n-1)

07-24 21:32