hdu1466計算直線的交點數 非原創

2021-09-12 07:49:13 字數 1346 閱讀 5242

平面上有n條直線,且無三線共點,問這些直線能有多少種不同交點數。 

比如,如果n=2,則可能的交點數量為0(平行)或者1(不平行)。

input輸入資料報含多個測試例項,每個測試例項佔一行,每行包含乙個正整數n(n<=20),n表示直線的數量. 

output每個測試例項對應一行輸出,從小到大列出所有相交方案,其中每個數為可能的交點數,每行的整數之間用乙個空格隔開。

sample input

2

3

sample output

0 1

0 2 3

n=1,2,3的情況:

0,10,2,3

如果已知小於n的情況,我們來分析加入第n條直線的情況(這裡n=4):

1、第四條與其餘直線全部平行 =>無交點;

2、第四條與其中兩條平行,交點數為(n-1)*1+0=3;

3、第四條與其中一條平行,這兩條平行直線和另外兩點直線的交點數為(n-2)*2=4,而另外兩條直線既可能平行也可能相交,因此可能交點數為:

(n-2)*2+0=4    或者         (n-2)*2+1=5    

4、 第四條直線不與任何一條直線平行,交點數為:

(n-3)*3+0=3   或者 (n-3)*3+2=5    或者 (n-3)*3+3=6

即n=4時,有0個,3個,4個,5個,6個不同交點數。
上述n=4的分析過程中,我們發現:

m條直線的交點方案數

=(m-r)條平行線與r條直線交叉的交點數

+ r條直線本身的交點方案

=(m-r)*r+r條之間本身的交點方案數(1<=r<=m)

由上推出 設n條直線的交點數為fn, 平行線有(n-r)個則fn(n)=(n-r)*r+fn(r);

用dp[i][j]表示i條直線,是否有會有j個交點,如果有j個交點,則置為1,否則為0; 

* 根據上面的方程:只要dp[r][j]=1(r條直線有j個交點是成立的),那麼肯定有dp[i][(i-r)*r+j]=1;

#include#include#include#include#include#includeusing namespace std;

int n;

bool dp[25][200];//190

int main()

}} }

while (scanf("%d",&n)!=-1)

printf("\n"); }

return 0;

}

posted @

2019-03-09 16:42

予歌 閱讀(

...)

編輯收藏

hdu 1466 計算直線的交點數

include intmain return0 一 n條直線把空間分成幾部分 現在說地是空間了,不是平面了,要注意!我們來討論一下吧 點分線 0維分1維 c n,1 c n,0 線分面 1維分2維 c n,2 c n,1 c n,0 麵分空間 2維分3維 c n,3 c n,2 c n,1 c n,...

hdu 1466 計算直線的交點數

平面上有n條直線,且無三線共點,問這些直線能有多少種不同交點數。比如,如果n 2,則可能的交點數量為0 平行 或者1 不平行 input 輸入資料報含多個測試例項,每個測試例項佔一行,每行包含乙個正整數n n 20 n表示直線的數量.output 每個測試例項對應一行輸出,從小到大列出所有相交方案,...

HDU1466 計算直線的交點數

1 n條直線互不平行且無三線共點的最多交點數max 1 2 n 1 n n 1 2 2 一般統計的方法 假設一共有n a b條直線 即n條直線分成2組,分別為a條和b條 則 總的交點數 a內的交點數 b內的交點數 a,b之間的交點數 3 我們來分析加入第n條直線的情況 這裡以n 4為例 分類方法 和...