本文只说明垂直桌面切的水平情况,不讨论空间问题。
Problem Description
一个人在吃蛋糕前都会随机决定要切几刀,而且保证切完之后得到最多块蛋糕(只能垂直于底面切)。有时候切得太多他自己都忘记掉切完有几块,为了确保他能吃到整个蛋糕,他得知道切完后的蛋糕的数量。
formulation
先给出公式:(result是蛋糕块数,n是刀数)
result = (n+1)*n/2 + 1
Analyze
(0)切割0次:1块
(1)切割1次:2块
(2)切割2次:4块
这应该是我们所有人都能想到的两次切割得最大块数的方法了。
(3)切割3次:7块
(3)切割4次:11块
好,我们发现了什么?
我们第 n 刀切下去,某一直线就会牵涉到 n+1 块蛋糕,而将这 n+1 块蛋糕切开,我们就又多了 n+1 块。
比如切1刀后,在一条(其实有很多条)直线上是不是牵涉了2块蛋糕?
切的第2刀,将这2块蛋糕切成4块(2+2),总共有4块蛋糕(2+2),现在又有直线牵涉了3块蛋糕;
切的第3刀,将这3块蛋糕切成6块(3+3),总共有7块蛋糕(4+3),现在又有直线牵涉了4块蛋糕;
切的第4刀,将这4块蛋糕切成8块(4+4),总共有11块蛋糕(7+4),现在又有直线牵涉了4块蛋糕;
…
只要我们沿着找出的这条直线切下去,就能一直得到最大块数。
所以切第n刀后最大块数=
n + (n-1) + (n-2) + … + 1 + 1 = (n+1)*n/2 + 1
**tips:**别忘了切0刀时还有1块哦!