HDU- 折线分割平面(递推)

折现分割平面:

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)=2
n^2-n+1;
4、Z字型: f [n] = f [n-1]+9* (n-1) +1
其他递推题目:
阿牛的EOF牛肉串
神、上帝以及老天爷

发布了34 篇原创文章 · 获赞 85 · 访问量 4628

猜你喜欢

转载自blog.csdn.net/weixin_45895026/article/details/103840047
今日推荐