HDU 1290 献给杭电五十周年校庆的礼物.

Problem Description
或许你曾经牢骚满腹
或许你依然心怀忧伤
或许你近在咫尺
或许你我天各一方

对于每一个学子
母校 
永远航行在
生命的海洋

今年是我们杭电建校五十周年,这是一个值得祝福的日子。我们该送给母校一个怎样的礼物呢?对于目前的大家来说,最好的礼物当然是省赛中的好成绩,我不能参赛,就送给学校一个DOOM III球形大蛋糕吧,这可是名牌,估计要花掉我半年的银子呢。

想象着正式校庆那一天,校长亲自操刀,把这个大蛋糕分给各地赶来祝贺的校友们,大家一定很高兴,呵呵,流口水了吧...

等一等,吃蛋糕之前先考大家一个问题:如果校长大人在蛋糕上切了N刀(校长刀法极好,每一刀都是一个绝对的平面),最多可以把这个球形蛋糕切成几块呢?

做不出这个题目,没有蛋糕吃的!
为-了-母-校-,为-了-蛋-糕-(不是为了DGMM,枫之羽最会浮想联翩...),加-油-!
 

Input
输入数据包含多个测试实例,每个实例占一行,每行包含一个整数n(1<=n<=1000),表示切的刀数。
 

Output
对于每组输入数据,请输出对应的蛋糕块数,每个测试实例输出一行。
 

Sample Input
  
  
1 2 3
 

Sample Output
  
  
2 4 8
 
====
学习一下线分割平面、以及面分割空间可以得到的最多平面数与最多空间数的知识吧。

这是一题平面分割空间的题目。

先来看看直线分割平面的问题:n条直线最多能将一个平面分成几个区域?

1条直线最多把平面分成2个区域;

2条直线最多把平面分成4个区域;

3条直线最多把平面分成7个区域;

4条直线最多把平面分成11个区域;

……

可以这么理解:

        第n条直线和n-1条直线相交,也就是最多有n-1个交点,最多被分成n段,每一段二分其所在的区域,所以最多多了n个区域,

        其递推公式即为:f(n)=f(n-1)+n;

        递推一下,就得到f(n)=1/2*(n*n+n)+1;

 

 

再来看看平面分割空间的问题:n个平面最多能将一个空间分成几个区域?

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

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

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

……

可以这么理解:

       若要第四个平面将空间分为最多部分,就要它与前三个平面都相交,且交线不重合。则第四个平面与前三个平面都相交,交线不重合,有三条交线,这三条交线都在第四个平面内,那么要想使这四个平面分空间为最多部分,就要使这三条交线分一个平面为最多部分。显然,三条直线分一个平面最多为7部分。所以,四个平面分空间数最多为:三个平面最多分平面数加上三条直线最多分平面的部分数:8+7=15。

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

递推公式即为:g(n)=g(n-1)+f(n-1);

把上面的公式递推一下,就得到通项公式:g(n)=(n*n*n+5*n+6)/6

====
有了递推公式,就简单了,直接上代码。。。
#include<stdio.h>
int main()
{
    __int64 n;
    while(~scanf("%I64d",&n))
        printf("%I64d\n",(n*n*n+5*n+6)/6);
    return 0;
}


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值