折现分割平面:
Problem Description
我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示。
Input
输入数据的第一行是一个整数C,表示测试实例的个数,然后是C 行数据,每行包含一个整数n(0<n<=10000),表示折线的数量。
Output
对于每个测试实例,请输出平面的最大分割数,每个实例的输出占一行。
Sample Input
2
1
2
Sample Output
2
7
递推分析:
1.先看一下直线分割的情况:
一条直线分割2个面,两条直线4个面,要使分割平面数最大,第三条应与前n-1条相交(三条线交于一点当然是不行的),这样,增加n条直线就会增加n-1个交点(大家可以自己画图试试),增加n个交点就会增加n+1个面,所以a[n]=(n*n+n+2)/2 (n是直线数,a[n]是平面数)。
2、对于一组平行线分割,满足: 2*n^2+1;
3、对于折线,满足:a[n]=2*n^2-n+1 (很容易发现,相比于平行线的情况,它多了一个-n,因为折线是两条平行线的一端相交,每组平行线相交后减少一个面,即n组折线相比于平行线减少了n个面)。
#include<stdio.h>
int main()
{
int c;
long long a[10005];
scanf("%d",&c);
while(c--)
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
a[i]=2*n*n-n+1;
printf("%lld\n",a[n]);
}
}
总结:
分割平面的几种类型:
1、直线型:a[n]=(nn+n+2)/2;
2、平行线型:f(n)=2n^2+1;
3、折线形:f(n)=2n^2-n+1;
4、Z字型: f [n] = f [n-1]+9* (n-1) +1
其他递推题目:
阿牛的EOF牛肉串
神、上帝以及老天爷