凸n邊形的不同劃分方式(遞推之卡塔蘭數 C++)

凸n邊形的不同劃分方式
總時間限制: 1000ms 內存限制: 65536kB
描述
卡特蘭數又稱卡塔蘭數,英文名Catalan number,是組合數學中一個常出現在各種計數問題中出現的數列。以比利時的數學家歐仁·查理·卡塔蘭 (1814–1894)的名字來命名。
最初,給卡塔蘭數建立的數學模型是:一個凸n邊形,通過不相交於n邊形內部的對角線,把n邊形拆分成若干三角形,不同的拆分數目用hn表示,hn即爲Catalan數。例如五邊形有如下五種拆分方案(如圖),故h5=5。求對於一個任意的凸n邊形相應的hn。
這裏寫圖片描述
輸入
一個正整數n,代表凸n邊形的邊數 (2≤n≤37)
輸出
一個正整數,凸n邊形劃分成若干三角形的不同劃分方式
樣例輸入
樣例輸入一:

4

樣例輸入二:

5

樣例輸出
樣例輸出一:

2

樣例輸出二:

5

提示
找出遞推式,三角形可認爲是獨立的1種拆分方式

思路點拔:經典的卡塔蘭數,遞推過程我在這裏再詳細證明一下一下:
這裏寫圖片描述

#include<cstdio>
long long a[42]={0,0,1,1};
int main()
{
    int n;
    scanf("%d",&n);
    if(n==2) //如果是2邊形,就輸出0,單獨處理一下
    {
        printf("0\n"); 
        return 0; //輸出後就可以結束了
    }
    for(int i=4;i<=n;i++) //用兩重循環,實現遞推式,外層循環是枚舉邊數
    {
        for(int j=2;j<i;j++) 
        {
            a[i]+=a[j]*a[i-j+1]; //遞推式
        }
    }
    printf("%lld\n",a[n]); //輸出a[n],就是正解
    return 0;//結束程序
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章