最近做數學題很來可樂,所以又來發幾篇文章:
組合數學:
題意:
給出一個整數B (1<=B<=11), 表示有1 2 3 ... B 這B個數, 可選擇其中的N (1<=N<=B)個數(不用按順序), 並用若干個括號將它們括起來.
如B = 2 時:
有 (1), (2), (12), (1)(2), (2)(1) 這5種情況
要求出所有情況的總數.
解題思路:
看懂題意後, 馬上做的是找算公式找規律, 但式子很複雜,就算了......後來找出了一條DP式如下:
設D[i] 表示有 i 個數時可以組成的所有情況總數
那麼有
D[i] = C(i, 1) * D[1] + C(i, 2) * D[2] + .. C(i, i - 1) * D[i - 1] + 1;(感覺和)
(從別算出從i 個數中選取 k個的取法總數, 即C(i, 1), 而前邊已算出D[k]的個數, 那麼從i個數中選取k個數之後用括號括題來的總數爲C(i, k) * D[k]).
其實上面的遞推式是錯誤的......
我是從小數推出來的,其實最後不應該加1,上面的式子忽略了從i個數中選取i個數的情況, 也就是 +1是錯誤的, 正確應該是+2^i - 1.......
最後說一句,小牛們可以打表過......