一:
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...