HDU 1023 卡特蘭數打表)

2021-08-11 03:18:13 字數 669 閱讀 5915

卡特蘭數:

h(0)=1;

h(1)=1;

h( n ) = ( ( 4*n-2 )/( n+1 )*h( n-1 ) );(n>=2)

其餘遞推式:h(n)=c(2n,n)/(n+1) (n=0,1,2,…)

h(n)=c(2n,n)-c(2n,n-1)(n=0,1,2,…)

前幾項為:1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012,

根據題目所給的樣例很容易能看出是卡特蘭數

主要在於打表

卡特蘭數第100位是乙個58位的數 爆long long了 c語言只能用陣列模擬大數

思想類似於萬進製

//這裡用第乙個遞推式打表

#include

int a[105][100];

void ktl()

while(yu)//把最後進製所得的yu 進到更高位上

for(j=len;j>=1;j--)//模擬除法

while(!a[i][len])//消除前導零

a[i][0]=len;//更新位數

}}int main()

printf("\n");

}return

0;}

卡特蘭數(HDU 1023)

卡特蘭數又稱卡塔蘭數,是組合數學中乙個常出現在各種計數問題中出現的數列。由以比利時的數學家歐仁 查理 卡塔蘭 1814 1894 命名。卡特蘭數 前幾項為 oeis中的數列a000108 1,1,2,5,14,42,132,429,1430,4862,16796,58786,208012,74290...

HDU 1023 卡特蘭數 數學

題意是求一列連續公升序的數經過乙個棧之後能變成的不同順序的數目。用乙個二維陣列,a i 0 表示第 i 個卡特蘭數的位數,a i j j 0 中存第 i 個卡特蘭數從低位到高位的第 j 個數,也就是說數是倒過來存的,輸出時要倒著輸出。如下 1 include2 int a 105 100 3 voi...

hdu4828卡特蘭數

題目大意 有2行n列的長方形格仔,把1到2n這些數放進格仔裡面,使每行每列都遞增。也就是相當於,n個0和n個1排序,要求每個點的前面都要求0的個數大於等於1的個數,問排列的順序的種數。可以轉換為卡特蘭數,有遞推式 cn 1 4n 2 n 2 cn 具體卡特蘭數的資料 要用到逆元 include in...