例題:
在乙個凸n邊形中,通過不相交於n邊形內部的對角線,把n邊形拆分成若干三角形,問有多少種拆分方案。
啊啊啊啊
卡特蘭數
卡特蘭數又稱卡塔蘭數,卡特蘭數是組合數學中乙個常出現在各種計數問題中的數列。以比利時的數學家歐仁·查理·卡塔蘭 (1814–1894)的名字來命名。
原理 令h(0)=1,h(1)=1,catalan數滿足遞推式:
h(n)= h(0)*h(n-1)+h(1)*h(n-2) + … + h(n-1)*h(0) (n>=2)
例如:h(2)=h(0)*h(1)+h(1)*h(0)=1*1+1*1=2
h(3)=h(0)*h(2)+h(1)*h(1)+h(2)*h(0)=1*2+1*1+2*1=5
另類遞推式 :
h(n)=h(n-1)*(4*n-2)/(n+1);
遞推關係的解為:
h(n)=c(2n,n)/(n+1) (n=0,1,2,…)
遞推關係的另類解為:
h(n)=c(2n,n)-c(2n,n-1)(n=0,1,2,…)
分析 如果純粹從f(4)=2,f(5)=5,f(6)=14,……,f(n)=n慢慢去歸納,恐怕很難找到問題的遞推式,我們必須從一般情況出發去找規律。
因為凸多邊形的任意一條邊必定屬於某乙個三角形,所以我們以某一條邊為基準,以這條邊的兩個頂點為起點p1和終點pn(p即point),將該凸多邊形的頂點依序標記為p1、p2、……、pn,再在該凸多邊形中找任意乙個不屬於這兩個點的頂點pk(2<=k<=n-1),來構成乙個三角形,用這個三角形把乙個凸多邊形劃分成兩個凸多邊形,其中乙個凸多邊形,是由p1,p2,……,pk構成的凸k邊形(頂點數即是邊數),另乙個凸多邊形,是由pk,pk+1,……,pn構成的凸n-k+1邊形。
此時,我們若把pk視為確定一點,那麼根據乘法原理,f(n)的問題就等價於——凸k多邊形的劃分方案數乘以凸n-k+1多邊形的劃分方案數,即選擇pk這個頂點的f(n)=f(k)×f(n-k+1)。而k可以選2到n-1,所以再根據加法原理,將k取不同值的劃分方案相加,得到的總方案數為:f(n)=f(2)f(n-2+1)+f(3)f(n-3+1)+……+f(n-1)f(2)。看到此處,再看看卡特蘭數的遞推式,答案不言而喻,即為f(n)=h(n-2) (n=2,3,4,……)。
最後,令f(2)=1,f(3)=1。
此處f(2)=1和f(3)=1的具體緣由須參考詳盡的「卡特蘭數」,也許可從凸四邊形f(4)=f(2)f(3)+ f(3)f(2)=2×f(2)f(3)倒推,四邊形的劃分方案不用規律推導都可以知道是2,那麼2×f(2)f(3)=2,則f(2)f(3)=1,又f(2)和f(3)若存在的話一定是整數,則f(2)=1,f(3)=1。(因為我沒研究過卡特蘭數的由來,此處僅作劉摶羽的臆測)
未完成。。。。。。
NOIP 衝刺 常見的遞推之第二類斯特林數
第二類斯特林數 例題 給定n 個有標號的球,標號依次為1,2,n。將這n個球放入r 個相同的盒子裡,不允許有空盒,問有多少種放置方法。例如把4個球放入2個盒子有7種方法,這7 種不同的放置方法依次為 我們設乙個狀態 f i j 代表把i個球放入j個盒子裡 盒子不空 的總計方案數,那麼,對於每乙個球,...
2018 9 26 2018NOIP衝刺之棧
最小字典序 stack 輸入序列中有 n 個正整數,棧 s 開始為空。你每次只可以進行下面兩種操作之一 將輸入序列頭端的資料移至 s 棧頂 進 s 棧 將 s 棧頂元素輸出並刪除 退 s 棧 當然,輸入序列非空時才可進行 操作,s 非空時才可進行 操作。當 和 的操作都無法執行時,一定得到 n 個資...
演算法之美 遞推之兔子的計畫生育
程式1 fibonacci數列的遞迴實現code in c c int fibonacci int n ok,搞定,輕鬆解決!慢點,跑跑試一試,n 12,ok!n 40,還行。n 50,夠慢了吧!怎麼會這麼慢呢?我們來仔細分析分析。看看這句 return fibonacci n 1 fibonacc...