分割問題 hdu 5050&&hdu1290

5050題意:分割問題,在給定的二維平面畫n個折線,問最多多少個區間(二維)。

1290題意:分割問題,在給定的三維空間用n個平面最多能組成多少個區間(三維)。


2050code

突破點數交點。

<span style="font-size:18px;">#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
int f[10010];
int main()
{
	int t,i,j,k,n,m;
	f[1]=2;
	for(i=2;i<=10000;i++)
	{
		f[i]=f[i-1]+4*(i-1)+2-1;
	}
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		printf("%d\n",f[n]);	
	}	
}
</span>

1290c ode

我們其實可以把三維轉化成二維。

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
int f[1010];
int g[1010];
int main()
{
	int i,j,k,n,m;
	g[1]=2;
	for(i=2;i<=1000;i++)
	{
		g[i]=g[i-1]+i;
	}
	f[1]=2;
	for(i=2;i<=1000;i++)
	{
		f[i]=f[i-1]+g[i-1];
	}
	while(scanf("%d",&n)!=EOF)
	{
	    printf("%d\n",f[n]);
	}
}



轉:看了類似的問題你一定會ac

(1) n條直線最多分平面問題


      題目大致如:n條直線,最多可以把平面分爲多少個區域。


      析:可能你以前就見過這題目,這充其量是一道初中的思考題。但一個類型的題目還是從簡單的入手,才容易發現規律。當有n-1條直線時,平面最多被分成了f(n-1)個區域。則第n條直線要是切成的區域數最多,就必須與每條直線相交且不能有同一交點。這樣就會得到n-1個交點。這些交點將第n條直線分爲2條射線和n-2條線斷。而每條射線和線斷將以有的區域一分爲二。這樣就多出了2+(n-2)個區域。


         故:f(n)=f(n-1)+n


                      =f(n-2)+(n-1)+n


                      ……


                      =f(1)+1+2+……+n


                      =n(n+1)/2+1




         (2) 折線分平面(hdu2050)


       根據直線分平面可知,由交點決定了射線和線段的條數,進而決定了新增的區域數。當n-1條折線時,區域數爲f(n-1)。爲了使增加的區域最多,則折線的兩邊的線段要和n-1條折線的邊,即2*(n-1)條線段相交。那麼新增的線段數爲4*(n-1),射線數爲2。但要注意的是,折線本身相鄰的兩線段只能增加一個區域。


       


       故:f(n)=f(n-1)+4(n-1)+2-1


                      =f(n-1)+4(n-1)+1


                     =f(n-2)+4(n-2)+4(n-1)+2


                     ……


                     =f(1)+4+4*2+……+4(n-1)+(n-1)   


                     =2n^2-n+1


      (3) 封閉曲線分平面問題


      題目大致如設有n條封閉曲線畫在平面上,而任何兩條封閉曲線恰好相交於兩點,且任何三條封閉曲線不相交於同一點,問這些封閉曲線把平面分割成的區域個數。


       析:當n-1個圓時,區域數爲f(n-1).那麼第n個圓就必須與前n-1個圓相交,則第n個圓被分爲2(n-1)段線段,增加了2(n-1)個區域。


  


             故: f(n)=f(n-1)+2(n-1)     


                             =f(1)+2+4+……+2(n-1)


                             =n^2-n+2


          (4)平面分割空間問題(hdu1290)


          由二維的分割問題可知,平面分割與線之間的交點有關,即交點決定射線和線段的條數,從而決定新增的區域數。試想在三維中則是否與平面的交線有關呢?當有n-1個平面時,分割的空間數爲f(n-1)。要有最多的空間數,則第n個平面需與前n-1個平面相交,且不能有共同的交線。即最多有n-1 條交線。而這n-1條交線把第n個平面最多分割成g(n-1)個區域。(g(n)爲(1)中的直線分平面的個數)此平面將原有的空間一分爲二,則最多增加g(n-1)個空間。


         


        故:f=f(n-1)+g(n-1)    ps:g(n)=n(n+1)/2+1


                   =f(n-2)+g(n-2)+g(n-1)


                   ……


                  =f(1)+g(1)+g(2)+……+g(n-1)


                 =2+(1*2+2*3+3*4+……+(n-1)n)/2+(n-1)


                 =(1+2^2+3^2+4^2+……+n^2-1-2-3-……-n )/2+n+1


                =(n^3+5n)/6+1



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章