noip2003 棧 (卡特蘭數)

2021-07-04 22:28:48 字數 1251 閱讀 4336

a1145. 棧的研究

時間限制:

1.0s   記憶體限制:

256.0mb

總提交次數:

767ac次數:

285   平均分:

61.20

將本題分享到:

檢視未格式化的試題

提交試題討論

試題**

noip2003 普及組

問題描述

棧是計算機中經典的資料結構,簡單的說,棧就是限制在一端進行插入刪除操作的線性表。棧有兩種最重要的操作,即pop(從棧頂彈出乙個元素)和push(將乙個元素進棧)。

棧的重要性不言自明,任何一門資料結構的課程都會介紹棧。寧寧同學在複習棧的基本概念時,想到了乙個書上沒有講過的問題,而他自己無法給出答案,所以需要你的幫忙。

問題描述

寧寧考慮的是這樣乙個問題:乙個運算元序列,從1,2,一直到n(圖示為1到3的情況),棧a的深度大於n。

現在可以進行兩種操作,

1.將乙個數,從運算元序列的頭端移到棧的頭端(對應資料結構棧的push操作)

2. 將乙個數,從棧的頭端移到輸出序列的尾端(對應資料結構棧的pop操作)

使用這兩種操作,由乙個運算元序列就可以得到一系列的輸出序列,下圖所示為由

1 2 3

生成序列

2 3 1

的過程。(原始狀態如上圖所示)

你的程式將對給定的n,計算並輸出由運算元序列1,2,…,n經過操作可能得到的輸出序列的總數。

輸入格式

輸入檔案只含乙個整數n(1≤n≤18)

輸出格式

輸出檔案只有一行,即可能輸出序列的總數目

樣例輸入 3

樣例輸出 5

解析:卡特蘭數應用:

**:

#include#define maxn 20

using namespace std;

int n,f[maxn];

int main()

{ int i,j,k;

scanf("%d",&n);

f[0]=f[1]=1;

for(i=2;i<=n;i++)

for(j=0;j

noip2003普及組 棧

棧 組合計數,卡特蘭數 o n 2 o n 2 o n2 首先任何一種合法的入棧 出棧操作序列都可以得到乙個不同的1 n的排列,因此可以得到的排列總數等於合法入棧 出棧操作序列的個數。該問題等價於求第n nn項cat alan catalan catala n數。在本題中我們使用公式 cnm cn ...

卡特蘭數,高精度卡特蘭數

簡單介紹 卡特蘭數是組合數學中常常出現的乙個數列。個人認為不管是遞推公式還是代表的含義都比斐波那契數列難理解一些。遞推公式 應用 1.cn表示長度2n的dyck word的個數。dyck word是乙個有n個x和n個y組成的字串。且全部的字首字串皆滿足x的個數大於等於y的個數。下面為長度為6的dyc...

卡特蘭數和超級卡特蘭數

這篇部落格主要是想講一下超級卡特蘭數 大施洛德數 順帶就想講一下卡特蘭數.卡特蘭數記為 c n c 1 1 forall n geq 2,c n sum c i c 前幾項大概是 1,1,2,5,14,42,132.直接遞推未免效率太低,我們考慮用生成函式優化.顯然有 c x c x 2 x 解得 ...