折线分割平面(递推)

http://acm.hdu.edu.cn/showproblem.php?pid=2050

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


 解题思路:这道题目与直线分割平面很是类似,都是采用了递推的思想。首先我们先看单条直线分割平面的情况。在添加第n条直线时,最多会有其他直线产生(n-1)个交点。因此会将平面多分为(n-1)+1个平面。此时直线分割平面的递推表达式便有:f[n] = f[n-1] + n;

折线与直线相类似,在增加第n条折线时,最多会增加2*2(n-1)个交点,因此平面会增加4(n-1)+1个。此时折线分割平面的递推表达式有: f[n] = f[n-1] +4*(n-1)+1;

c++代码:

#include<iostream>
using namespace std;
#define N 10005
int main()
{
	ios::sync_with_stdio(false);
	int n,f[N];
	f[1] = 2;
	f[2] = 7;
	for(int i = 3; i < N;i++){
		f[i] = f[i-1]+4*(i-1)+1;
	}
	cin>>n;
	while(n--)
	{
		cin>>a;
		cout<<f[a]<<endl;
	}
	return 0;
}



猜你喜欢

转载自blog.csdn.net/qq_36711003/article/details/79468908