n个数进栈后输出的可能序列数
生活随笔
收集整理的這篇文章主要介紹了
n个数进栈后输出的可能序列数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本題的描述十分簡單。n個數依次進棧,可隨機出棧。求有幾種可能。
解釋一下原理:建立數組f。f[i]表示i個數的全部可能性。
f[0] = 1, f[1] = 1; //當然只有一個
設 x 為當前出棧序列的最后一個,則x有n種取值
由于x是最后一個出棧的,所以可以將已經出棧的數分成兩部分
比x小的數有x-1個, 所以這些數的全部出棧可能為f[x-1]
比x大的數有n-x個,所以這些數的全部出棧可能為f[n-x]
這兩部分互相影響,所以一個x的取值能夠得到的所有可能性為
f[x-1] * f[n-x]
兩部分不能互相混合,因為要降序排列,前面小的只有降完后才能插入后面大的數
可由乘法原理得到總數為相乘
另外,由于x有n個取值,所以
ans = f[0]*f[n-1] + f[1]*f[n-2] + … + f[n-1]*f[0];
這,就是傳說中的卡特蘭數
作者: inexistent 更新時間: 2017-10-06 17:03 在Ta的博客查看 舉報
轉自洛谷題解
總結
以上是生活随笔為你收集整理的n个数进栈后输出的可能序列数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果新机被命名为iPhone12mini
- 下一篇: 为什么分数是循环小数