1.用dfs來做,記錄以備用
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8view code#define mem(a) memset(a,0,sizeof(a))
9using
namespace
std;
10long f[20][20
];11
long dfs(int x,int y) //
x外,y內
122122}
23int
main()
24
2.卡特蘭數
設某位置為k,則比k早進棧且早出棧的有k-1個數,則有h(k-1)種可能,同理比k晚的有h(n-k)方案。 所以
h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0)=c(2n,n)-c(2n,n+1)(n=0,1,2,...)=c(2n,n)/(n+1)//k的所有位置的可能性
//如果把陣列定義在main裡面 要初始化
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8view code#define mem(a) memset(a,0,sizeof(a))
9using
namespace
std;
10int f[20
];11
intmain()
1221 printf("
%d\n
",f[n]);
22return0;
23 }
卡特蘭數 記憶化搜尋 dp P1044 棧
這個是乙個卡特蘭數的板子題 遞推式1 遞推式2 卡特蘭數,其前幾項為 1,2,5,14,42,132,429 include include include include include include include include include include include include...
1330 出棧序列統計 卡特蘭數
題目描述 按照1,2,n 1,n的順序入棧,問可以得到多少種出棧序列。如n 3時有1 2 3,1 3 2,2 1 3,2 3 1,3 2 1共5種出棧序列。解題思路 設f n 為n個數時的方案數。可知 f 0 1 f 1 1 f 2 2 f 3 5 當n 4時 f1 f2 f3 f4 1 2 3 4...
棧和卡特蘭數(Catalan number)
棧是計算機中經典的資料結構,我們也會遇到乙個常見的問題 一共有多少種合法的出棧順序?先說一下什麼是合法的出棧序列,凡是合法序列都遵循以下規律 即對於出棧序列中的每乙個數字,在它後面的 比它小的所有數字,一定是按遞減順序排列的。例如 有數字1 2 3 4 依次入棧,那麼他們的出棧順序中 所以到底有多少...