catalan(卡特蘭)數

2021-09-26 18:13:27 字數 1121 閱讀 5405

一:

h(n)= h(0)*h(n-1) + h(1)*h(n-2) + ... + h(n-1)h(0) (其中n>=2)h[0]=h[1]=1;

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

h(n)=c(2n,n)

一般情況(要取模)下的求法:

簡單的catalan模板題

這個題要取1e9+7的模,直接按照公式h(n)=(4n-2)/(n+1)*h(n-1)(n>1) h(0)=1挨個遞推求

除n+1變為乘n+1在1e9+7下的逆元

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

const int mod=1000000007;

long long h[1000005];

long long rev(long long x)

base*=base;

base%=mod;

c/=2;

}return ans;

}int main()

scanf("%lld",&t);

while(t--)

return 0;

}

二:遞推求卡特蘭數

假設k為最後進棧的數,那麼比k小的數有k-1個,比k大的數有n-k個

這樣總共會有(k-1)*(n-k)種情況

k可以取1......n,所以卡特蘭數有res[0]*res[n-1]+res[1]*res[n-2]+....+res[n-1]*res[0]個;

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

typedef long long ll;

ll res[60005];

int main()

while(scanf("%lld",&n)==1)

return 0;

}

卡特蘭數 Catalan

問題 程式設計之美 第4.3節中提到了 買票找零 問題,查閱了下資料,此問題和卡特蘭數 cn有關,其定義如下 卡特蘭數真是乙個神奇的數字,很多組合問題的數量都和它有關係,例如 yyy xyxxyy xyxyxy xxyyxy xxyxyy ab c d a bc d ab cd a bc d a b...

Catalan數(卡特蘭數)

卡特蘭數 規定h 0 1,而h 1 1,h 2 2,h 3 5,h 4 14,h 5 42,h 6 132,h 7 429,h 8 1430,h 9 4862,h 10 16796,h 11 58786,h 12 208012,h 13 742900,h 14 2674440,h 15 969484...

卡特蘭數 Catalan數

卡特蘭數 規定h 0 1,而h 1 1,h 2 2,h 3 5,h 4 14,h 5 42,h 6 132,h 7 429,h 8 1430,h 9 4862,h 10 16796,h 11 58786,h 12 208012,h 13 742900,h 14 2674440,h 15 969484...