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 ",ans); 22 23 } 24 return 0; 25 }