您的位置:首页 > 其它

hdu,2050,折线分割平面

2015-02-07 23:13 253 查看
这种类型的题目,在acm编程中比较经典,这里我们由浅入深来学习下:

(1)在一个平面上有一个圆和n条直线,这些直线中每一条在圆内同其他直线相交,假设没有3条直线相

交于一点,试问这些直线将圆分成多少区域。

很容易看出递推关系,每新增一条直线,都将原来所有的区域分成两半,因此第n条直线会在原来的基础

上再添加n个平面,函数递推关系式如下:

递推公式1:

f(0) = 1

f(1) = 2

f(2) = 4

...

f(n) = f(n - 1) + n

通项公式推导1:

f(n)

= f(n - 1) + n

= f(n - 2) + n + (n - 1)

= ...

= f(0) + n + (n - 1) + ... + 1

= 1 + (1 + n) * n / 2

(2)若每次使用两条直线分割,即此时的n相当于原来的2n,可得:

递推公式2:

f(0) = 1

f(1) = 4

f(2) = 11

...

f(n) = f(n - 1) + 2 * n - 1 + 2 * n = f(n - 1) + 4 * n - 1

通项公式推导2_1:

f(n)

= f(n - 1) + (4 * n - 1)

= f(n - 2) + 4 * (n - 1) - 1 + (4 * n - 1)

= ...

= f(0) + (4 * 1 - 1) + (4 * 2 - 1) + ... + (4 * n - 1)

= 1 + 4 * (1 + 2 + .. + n) - n

= 1 + 4 * (1 + n) * n / 2 - n

= 1 + 2 * n * n + n

上面的推导公式比较复杂,其实也可以直接将通项公式推导1中推导结果的n用2n替代,这样就容易理解多

了:

通项公式推导2_2:

f(n)

= 1 + (1 + (2 * n)) * (2 * n) / 2

= 1 + 2 * n * n + n

(3)若是普通直线,相交处所分割的平面为4份,而折线为两份,即每次分割比上面所考虑的情况少2份

,那么只要在上述情况的每次分割时减去2就能得到本题的结果了。

递推公式3:

f(n)

= f(n - 1) + 4 * n - 1 - 2

= f(n - 1) + 4 * n - 3

通项公式:

f(n)

= 1 + 2 * n * n + n - 2 * n

= 1 + 2 * n * n - n

对于(3)这种类型,还有另外一种很好的解释(分享下!!):

分割平面的个数=交点个数+顶点个数+1

令f(n-1)为前n-1条折线分割的平面数,当添加第n条折线时。

因为每一条边与前n-1条折线的两条边都相交,故增加的交点数为2*2*(n-1),顶点增加1,故

f(n)=f(n-1)+4(n-1)+1

f(n-1)=f(n-2)+4(n-2)+1

....

f(2)=f(1)+4*1+1

f(1)=2

f(n)-2=4((n-1)+(n-2)+...+1)+(n-1)=4*((1+n-1)*(n-1)/2)+n-1=2(n*n-n)+n-1

f(n)=2n^2-n+1

可以得出公式f(n)=2n^2-n+1

总结:

直线:

最多可分为(1/2)*n*(n+1)+1块区域

折线:

那就是可以分成(2×n^2-n+1)块区域
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: