HDU1290---献给杭电五十周年校庆的礼物 HDU(106)

#pragma warning(disable:4786)
#include<iostream>
#include<algorithm>
#include<cmath>
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<queue>
#include<set>
#include<vector>
#include<string>
#include<ctime>
#include<string.h>
using namespace std;
#define pi acos(-1.0)
//#define LL __int64
typedef long long LL;
#define INF 0x7fffffffffffffff
#define bug puts("hear!")
#define inf 0x7fffffff
#define eps 1e-10
#define FRE freopen("in.txt","r",stdin)
#define E exp(1.0)
#define mod 1000000007

int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
        printf("%d\n",(n*n*n+5*n)/6+1);
    return 0;
}

数学公式

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

 HDU <wbr> <wbr>1290 <wbr> <wbr>切蛋糕 <wbr> <wbr>(献给杭电五十周年校庆的礼物)

 

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

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

HDU <wbr> <wbr>1290 <wbr> <wbr>切蛋糕 <wbr> <wbr>(献给杭电五十周年校庆的礼物)

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

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

HDU <wbr> <wbr>1290 <wbr> <wbr>切蛋糕 <wbr> <wbr>(献给杭电五十周年校庆的礼物)

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

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

 HDU <wbr> <wbr>1290 <wbr> <wbr>切蛋糕 <wbr> <wbr>(献给杭电五十周年校庆的礼物)

即:

切完后依次为:

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

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

这是大牛的思路。我是直接推得公式的,思路写起来太麻烦,就COPY了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值