Math——HDUOJ 1290

来源:互联网 发布:redis hash key mysql 编辑:程序博客网 时间:2024/06/06 01:40

原题


  • Problem Description

。。。。。想象着正式校庆那一天,校长亲自操刀,把这个大蛋糕分给各地赶来祝贺的校友们,大家一定很高兴,呵呵,流口水了吧…
等一等,吃蛋糕之前先考大家一个问题:如果校长大人在蛋糕上切了N刀(校长刀法极好,每一刀都是一个绝对的平面),最多可以把这个球形蛋糕切成几块呢?
做不出这个题目,没有蛋糕吃的!
为-了-母-校-,为-了-蛋-糕-(不是为了DGMM,枫之羽最会浮想联翩…),加-油-!

  • Input

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

  • Output

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

  • Sample Input

    1
    2
    3

  • Sample Output

    2
    4
    8

  • 解题思路:

    题目的意思,就是给你一个空间,用n个平面可以将空间分割成多少小空间?!

    • 可以从二位平面入手:给你一个平面,用n条线可以将平面分割成多少小平面??(这n条直线中,任两条不平行,任三条不交于同一点)
      • 设n条直线最多可将平面分割成 bn个部分
      • 当n=1,2,3时,易知平面最多被分为2,4,7个部分
      • 当n=k 时,设 k条直线将平面分成了 bk个部分。
      • 接着当添加上第k+1条直线时,这条直线与前k 条直线相交有 k个交点,这 k个交点将第k+1条直线分割成k段,而每一段将它所在的区域一分为二,从而增加了K+1个区域
      • 故得递推关系式:b(k+1)=b(k)+(k+1) ,即 b(k)-b(k-1)=k+1
        显然当k=1 时, b(1) =2,当k=2,3…..n 时,我们得到下列式子:
        • b(2)-b(1)=2;
        • b(3)-b(2)=3;
        • b(4)-b(3)=4;
        • b(5)-b(4)=5;
          ……
        • b(n)-b(n-1)=n;
      • 将这 n-1个式子相加,得b(n)=1/2×(n^2+n+2),即n条直线最多可将平面分割成1/2×(n^2+n+2) 个部分。
    • 现在,我们回到原问题,用刚才的思路来解决空间的问题,设k个平面将空间分割成a(k)个部分,再添加上第k+1个平面,这个平面与前k个平面相交有k条交线,这k条交线,任意三条不共点,任意两条不平行,因此这第k+1个平面就被这k条直线分割成b(k)个部分。
      • 这b(k)个部分平面中的每一个,都把它所通过的那一部分空间分割成两个较小的空间。所以,添加上这第k+1个平面后就把原有的空间数增加了b(k)个部分
      • 由此的递推关系式:a(k+1)=a(k)+b(k), 即 a(k)-a(k-1)=b(k)
        当k=2,3……..n时,我们得到如下n-1个关系式
        • a(2)-a(1)=b(1);
        • a(3)-a(2)=b(2);
          ……
        • a(n)-a(n-1)=b(n-1);
      • 将这n-1个式子相加,得
        a(n)=a(1)+(b(1)+b(2)+b(3)+…….+b(n-1))
        因为 b(n)= 1/2*(n^2+n+2),a(1)=2
        所以 a(n)=2+{1/2*(1^2+1+2)+(2^2+2+2)+(3^2+3+2)+……..+((n-1^2)+(n-1)+2)}=(n^3+5×n+6)/6
        n个平面最多可将平面分割成 =(n^3+5×n+6)/6个部分

    代码:

    #include<stdio.h>short n;int main(){    while (scanf("%d",&n)!=EOF)        printf("%d\n", (n * n * n + 5 * n + 6) / 6);}

    总结一下数学常用的公式:

    立方和公式:a^3 +b^3 = (a+b)(a^2-ab+b^2)
    立方差公式:a^3 - b^3 = (a -b)(a^2+ab+b^2)
    平方前n项和:1^2+2^2+3^2+…+n^2 = n(n+1)(2n+1)/6
    立方前n项和:1^3+2^3+3^3+…+n^3 = [n(n+1)/2]^2
    n条直线最多可将平面分割成(n^2+n+2)/2个部分
    n个平面最多可将平面分割成(n^3+5×n+6)/6个部分
    n个三角形最多可以把平面分成sum[n-1]+6×(n-1)个部分

    原创粉丝点击