1. 程式人生 > >關於卡特蘭數及典型例題

關於卡特蘭數及典型例題

關於卡特蘭數:
f[0] = 1, f[1] = 1;
for(int i = 2; i <= n; i++)
    for(int j = 0; j < i; j++)
        f[i] += f[j] * f[i-j-1];

關於乘法原理和加法原理:1.便捷記憶:乘法原理:步步相關

                    加法原理:類類獨立

2.區別:對於乘法原理,我們假設解決一件事需要n步。再假設完成第1步有m1種方法,完成第2步有m2種方法........完成第n步有mn種方法。則對於完成這件事的總方法數:Total = m1 * m2 * m3 * ..... *mn

            那麼對於加法原理,我們就假設解決一件事有n種解決方案數。假設第一種方案有m1

種解決方法,第2種方案有m2種解決方法.....第n種方案有mn種解決方法。則對於完成這件事的總方法數:Total = m1 + m2 + m3 + ...... +mn

一些例項:

1.二叉樹記數2.出棧序列3.加括號4.凸多邊形劃分

      給凸多邊形每個定點標上編號1,2,3,......,n。邊1n一定屬於某個三角形1nk。可以看出1nk的左邊是一個k邊形,右邊是一個n - k + 1邊形;根據乘法原理有方案數為f[k][n - k + 1],然後根據加法原理得出答案。

程式碼的核心部分是一樣的...