Problem Description
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语言代码如下:
#includelong 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