HDoj 2050 折线分割平面

Problem Description
我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示。
HDoj 2050 折线分割平面_第1张图片
 

 

Input
输入数据的第一行是一个整数C,表示测试实例的个数,然后是C 行数据,每行包含一个整数n(0
 

 

Output
对于每个测试实例,请输出平面的最大分割数,每个实例的输出占一行。

 

 

Sample Input
2 1 2
 

 

Sample Output
2 7
 

 

Author
lcy
 

 

Source
递推求解专题练习(For Beginner)
 

 

Recommend
lcy   |   We have carefully selected several similar problems for you:   1297  1465  1290  2501  2190 
 
 
首先我们先看n条直线切割的最大平面数
n                                                                       最大平面数
1              0                    +             1*2                       2
2              0                    +             2*2                       4
3              1                    +             2*3                       7
4              1+2                +             2*4                      11
5              1+2+3            +             2*5                      16
n              1+2+...+(n-2)  +             2*n                      (n²+n+2)
 
当变成折线时,
因为每条折线最多单独分割两个区域,而直线是四个,
因此如果把每两条直线的一个端点相交,就变成了一条折线,被分割的区域就减少2。
也就是每2n条直线,每每两条端点相交,变成了n条折线,被分割的区域就减少了2*n;
因此,如果要求n条折线分割的平面数,只需求2n条直线分割平面数m,再求出m-2n的大小即是n条折线切割的平面数。
因此当直线切割的最大平面数 F(n) = n²+n+2时
折线切割的最大平面数H(n)=F(2n)-2*n=2n²-n+1;
 
C语言代码如下:
#include

long long nj(int);
int main()
{
    int n,m;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%d",&m);
        printf("%ld\n",(long)m*m*2-m+1);
    }
}

 

参考文章1(本文所参考的):https://blog.csdn.net/qq_40907279/article/details/78708856

参考文章2(较为简单):https://blog.csdn.net/u011506951/article/details/25393533?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1

参考文章3(递推,找规律):https://blog.csdn.net/hpulw/article/details/50579567

你可能感兴趣的:(HDoj 2050 折线分割平面)