一道经典数学题及其周边问题
2009-05-01 17:58 Logic0 阅读(276) 评论(1) 编辑 收藏 举报题目:
http://acm.hdu.edu.cn/showproblem.php?pid=1290
切球形蛋糕,N刀最多切多少块的问题。
先来看下其周边的几个简单问题:
1.同一个平面内的N条直线,最多有多少个交点。
2.有一个平面,问N条直线最多可以将这个平面分成几部分。
3.有一个三维空间,问N个平面最多可以将这个空间分成几部分。
问题分析:
- 先看第一个问题。
先看只有少数几条直线的情况:
- 两条直线如果平行则没有交点,相交则有一个交点
- 有三条直线l1,l2,l3的时候,l1//l2//l3,则没有交点;l1//l2,l3不平行与l1或者l2,有两个交点;l1与l2不平行时,有一个交点,l3与他们相交,l3的交点数为 2 = n - 1;
- 四条直线的时候,是三条直线相交的最多交点数+3。
- 扩展到n条直线的情况,交点数量为(n-1)条直线的交点数+第n条直线上的交点数。
总结方程:
f(n) = f(n-1)+(n-1) ================>> f(n) = n*(n-1)/2 , n > 0
- 第二个问题
利用第一个题的规律,加入第n条直线后,第n条直线上的(n-1)个点讲这条线分为n段,多出来n个面(为了避免重复计算,只算加入的直线一侧的面即可)
总结方程:
f(n) = f(n-1)+n , f(0) = 1 , f(1) = 2;=======>> f(n) = n*(n-1)/2+1;
- 第三个问题
综合前两个问题。假设前(n-1)个面把空间分成了f(n-1)个部分,则加入第n个面后,要达到最多,则必须与前(n-1)个面都相交,则第n个面上会出现(n-1)条交线,把第n个面分成了(n*(n-1)/2+1)个子平面,而每个子平面都可以将空间分为2部分,避免重复计算,只计算一侧的空间数,这样就可以推理得知:
f(n) = f(n-1) + n*(n-1)/2 + 1 =========>>f(n) = (n*n*n+5*n+6)/6;
切蛋糕问题就是第三个问题的不同叙述而已。