切換
舊版
前往
大廳
主題

ZeroJudge - e876: Q1 - 配對連線 解題心得

Not In My Back Yard | 2020-04-19 02:10:39 | 巴幣 0 | 人氣 168

題目連結:


題目大意:
每列給定一正整數 N (1 ≦ N ≦ 100,N = 0 時代表輸入結束),代表一個圓上現在有 2N 個點。將這 2N 個點兩兩配對並用線將兩點連起,形成 N 條線段。請問有多少種配對畫線的方式,使得這 N 條線段彼此不互相交叉?



範例輸入:
1
2
3
0


範例輸出:
1
2
5


解題思維:
觀察以下有 12 個點(n = 6)的圓:
可以看到對於最頂端的那個點(放射線狀的出發點),總共有 11 條線可以連去其他的點。假設現在挑的是實線的那一條(位於中間的線段),於此將圓分作左右兩邊,兩邊各 5 個點。可以看到剩下的兩邊各自連線一定至少會有左邊一點接到右邊一點,就會跨到中間的線。

但是如果現在是挑中間的線的左邊那一條(最靠近中間的並屬於左邊的那一條線段),將會把左右兩邊分為 4 、 6 個點,可以對應到 n = 2 以及 n = 3 的情況。也就是對於這個分割線的挑法,其方法數為 (n = 2 的方法) × (n = 3 的方法) 。

類似的,可以找到其他的方法數為(n = 1 的方法) × (n = 4 的方法)、(n = 0 的方法) × (n = 5 的方法)、(n = 3 的方法) × (n = 2 的方法)、(n = 4 的方法) × (n = 1的方法)、(n = 5 的方法) × (n = 0 的方法)

假設 Di 代表 n = i 的方法數(n = 0 的方法數在此計為 1),則上面的性質可寫為
可以看到這等價於以前提過的卡塔蘭數(Catalan Number)。但是因為 n 可以到 100 ,使得方法數的值可以很大。因此需要大數運算。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

相關創作

更多創作