hdu 1290——献给杭电五十周年校庆的礼物

来源:互联网 发布:开展数据库系统培训 编辑:程序博客网 时间:2024/05/17 07:41

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1290

解题思路:数学题一道。其实就是直线分割平面,把规律找到,总结出来公式,题就解出来了。

#include<stdio.h>int main(){int n;__int64 m;while(scanf("%d",&n)!=-1){m=((n*n*n+5*n))/6+1;printf("%d\n",m);}return 0;} 

直线分割平面

方法一:封闭曲线分平面问题

题目大致如设有n条封闭曲线画在平面上,而任何两条封闭曲线恰好相交于两点,且任何三条封闭曲线不相交于同一点,问这些封闭曲线把平面分割成的区域个数。

析:当n-1个圆时,区域数为f(n-1).那么第n个圆就必须与前n-1个圆相交,则第n个圆被分为2(n-1)段线段,增加了2(n-1)个区域。

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

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

=n^2-n+2

平面分割空间问题

由二维的分割问题可知,平面分割与线之间的交点有关,即交点决定射线和线段的条数,从而决定新增的区域数。试想在三维中则是否与平面的交线有关呢?当有n-1个平面时,分割的空间数为f(n-1)。要有最多的空间数,则第n个平面需与前n-1个平面相交,且不能有共同的交线。即最多有n-1 条交线。而这n-1条交线把第n个平面最多分割成g(n-1)个区域。(g(n)为(1)中的直线分平面的个数)此平面将原有的空间一分为二,则最多增加g(n-1)个空间。

故:f=f(n-1)+g(n-1) ps:g(n)=n(n+1)/2+1

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

……

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

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

=(1+2^2+3^2+4^2+……+n^2-1-2-3-……-n)/2+n+1

=(n^3+5n)/6+1

方法二:待定系数法

这类问题一般都有固定的公式,告诉大家一个技巧:二维的一般是f(x)=a*x^2+b*x+c,三维的一般是f(x)=a*x^3+b*x^2+c*x+d.用带定系数法求出各个系数就行了。

(以下内容转载自http://hi.baidu.com/lileiyang12/item/d824c7e76f616b304ddcafa7)

n个平面最多分空间为几个部分的问题首先,可以通过直观想象1-3个平面最多分空间为几个部分。

1个平面最多将空间分为2部分;

2个平面最多将空间分为4部分;

3个平面最多将空间分为8部分;

若要第四个平面将空间分为最多部分,就要它与前三个平面都相交,且交线不重合。则第四个平面与前三个平面都相交,交线不重合,有三条交线,

这三条交线都在第四个平面内,那么【要想使这四个平面分空间为最多部分就要使这三条交线分一个平面为最多部分】。显然,三条直线分一个平面最多

为7部分。所以,四个平面分空间数最多为:三个平面最多分平面数加上三条直线最多分平面的部分数:8+7=15。

推广到一般情况,n个平面最多可分空间为f(n)部分,第n个平面与n-1个平面分别相交且交线不重合,问题转化为n-1条直线最多将一个平面分成几部分。

所以:

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

递归得:

f(n)=(n^3+ 5n + 6)/6

借鉴网友的思想~~~~~~~~~~~~~~~~~~~~~~~

第一步:一刀切下去,将空间切为两半

sum[1 ] = 2

第二步:一刀切下去,上一个平面与这个平面的交线将这个平面分为两半,在原来的基础上增加2(如图中圆形分区)

sum[2 ] = sum[ 1 ]+2=4


第三步:一刀切下去,上两个平面与这个平面的交线将这个平面分为四半,在原来的基础上增加4(如图中圆形分区)

sum[3 ] = sum[ 2 ] + 4 = 8


第四步:一刀切下去,上三个平面与这个平面的交线将这个平面分为七半,在原来的基础上增加7(如图中圆形分区)

sum[4 ] = sum[ 3 ] + 7 = 15


第五步:一刀切下去,上四个平面与这个平面的交线将这个平面分为11半,在原来的基础上增加11(如图中圆形分区)

sum[5 ] = sum[ 4 ] + 11 = 26


即:

切完后依次为:

2,4,8,15,26,42…………………

两者之差为D[n]:

2,4,7,11,16……………….

两者之差的查为d[n]:

2,3,4,5……………….

d[n]= d[ n – 1] + 1 -------àd[n] = n+1 //2,3,4……

-àD[n]= D[n – 1] + n----àD[n] = 2 +2+3+4+......+n = 1 +n*(n + 1)/2 //2,4,8,15,26…

sum[n]= sum[n - 1] +D[n]---àsum[n] = sum[1] +D[n]+ D[n-1]+ .....+D[2]

--àsum[n]=(n^3+ 5n )/6 +1

原创粉丝点击