1. 程式人生 > >hdu 2050 折線分割平面 (遞推)

hdu 2050 折線分割平面 (遞推)

原題連結:http://acm.hdu.edu.cn/showproblem.php?pid=2050

任何三條直線不會相交於一點。

分析:

我們容易知道當n條直線分割平面的時候,遞推公式為 F(n)=F(n-1)+n      公式為  F(n)=(n+1)*n/2+1

(遞推公式可以這樣解釋,每條直線與前面的直線共有n-1個交點,所以增加n個平面)

因此,我們容易得出 當是n對平行線分割平面時,遞推公式為  F(n)=F(n-1)+4*n-2   公式為 F(n)=2*n^2+1

(遞推公式解釋為:第2*n-1條直線和2*n條直線,各增加2*(n-1)+1個平面,所以共增加4*n-2個平面)

可以把每對平行線,一頭相交,每對相交都會減少一個平面,所以共減少n個平面。

所以有遞推公式 F(n)=F(n-1)+4*n-3  公式為 F(n)=2*n^2 - n + 1

程式碼如下:

公式:

#include<iostream>
using namespace std;

int main()
{
	int T;
	cin >> T;
	while (T--)
	{
		int n;
		cin >> n;
		cout << 2 * n*n - n + 1 << endl;
	}
	return 0;
}

遞推公式:
#include<iostream>
using namespace std;

int main()
{
	int sum[10000 + 10] = {0,2};
	for (int i = 2; i <= 10000; i++)
		sum[i] = sum[i - 1] + 4*i-3;
	int T;
	cin >> T;
	while (T--)
	{
		int n;
		cin >> n;
		cout << sum[n] << endl;
	}
	return 0;
}