折线切割平面(hdu 2050)

Description

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

Input

输入数据的第一行是一个整数C,表示测试实例的个数,然后是C 行数据,每行包含一个整数n(0<n<=10000),表示折线的数量。 

Output

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

Sample Input

2
1
2

Sample Output

2
7

题目大意:如题.


递推题,线段切割平面问题,一条直线分平面为两份,折线就是两条直线,每条射线与已有图形的每条边相交切无任何三条直线交于同一点,即为最大值,一组折线交每条线2个点,分为4条线段,2条射线,由于是折线-1,dp[n]=4*[n-1]+2-1+dp[n-1].
故:dp(n)=dp(n-1)+4(n-1)+2-1


                      =dp(n-1)+4(n-1)+1


                     =dp(n-2)+4(n-2)+4(n-1)+2
                     ……

                     =dp(1)+4+4*2+……+4(n-1)+(n-1)   

=2+4*(n*(n-1))/2+(n-1);

                     =2n^2-n+1


 1 #include <iostream>
 2 #include<stdio.h>
 3 #include<string.h>
 4 #include<math.h>
 5 #include<ctype.h>
 6 #include<queue>
 7 #include<stack>
 8 #include<algorithm>
 9 using namespace std;
10 #define oo 0x3f3f3f3f
11 
12 
13 int main()
14 {
15     int T,n;
16     scanf("%d",&T);
17     while(T--)
18     {
19         scanf("%d",&n);
20         long long ans=2*n*n-n+1;
21         printf("%I64d\n",ans);
22 
23     }
24     return 0;
25 }

 




posted on 2016-08-08 16:23  就想起个能用的名字  阅读(243)  评论(0)    收藏  举报

导航