洛谷——P1044 棧
阿新 • • 發佈:2017-07-18
pac ace urn 自己 sub 重要性 輸入 load logs
https://www.luogu.org/problem/show?pid=1044#sub
題目背景
棧是計算機中經典的數據結構,簡單的說,棧就是限制在一端進行插入刪除操作的線性表。
棧有兩種最重要的操作,即pop(從棧頂彈出一個元素)和push(將一個元素進棧)。
棧的重要性不言自明,任何一門數據結構的課程都會介紹棧。寧寧同學在復習棧的基本概念時,想到了一個書上沒有講過的問題,而他自己無法給出答案,所以需要你的幫忙。
題目描述
寧寧考慮的是這樣一個問題:一個操作數序列,從1,2,一直到n(圖示為1到3的情況),棧A的深度大於n。
現在可以進行兩種操作,
1.將一個數,從操作數序列的頭端移到棧的頭端(對應數據結構棧的push操作)
- 將一個數,從棧的頭端移到輸出序列的尾端(對應數據結構棧的pop操作)
使用這兩種操作,由一個操作數序列就可以得到一系列的輸出序列,下圖所示為由1 2 3生成序列2 3 1的過程。
(原始狀態如上圖所示)
你的程序將對給定的n,計算並輸出由操作數序列1,2,…,n經過操作可能得到的輸出序列的總數。
輸入輸出格式
輸入格式:
輸入文件只含一個整數n(1≤n≤18)
輸出格式:
輸出文件只有一行,即可能輸出序列的總數目
輸入輸出樣例
輸入樣例#1:3輸出樣例#1:
5
科特蘭數
1 #include <algorithm> 2#include <cstdio> 3 4 using namespace std; 5 6 int n,ans,f[100]; 7 8 int main() 9 { 10 scanf("%d",&n); 11 f[0]=1; 12 for(int i=1;i<=n;i++) 13 for(int j=0;j<n;j++) 14 f[i]+=f[j]*f[i-j-1]; 15 printf("%d",f[n]); 16 return 0; 17}
洛谷——P1044 棧