問題 E 遞迴入門 出棧序列統計

2021-10-03 20:52:02 字數 1019 閱讀 1697

問題 e: 【遞迴入門】出棧序列統計

[命題人 : 外部匯入]

時間限制 : 1.000 sec 記憶體限制 : 128 mb

題目描述

棧是常用的一種資料結構,有n令元素在棧頂端一側等待進棧,棧頂端另一側是出棧序列。你已經知道棧的操作有兩•種:push和pop,前者是將乙個元素進棧,後者是將棧頂元素彈出。現在要使用這兩種操作,由乙個操作序列可以得到一系列的輸出序列。請你程式設計求出對於給定的n,計算並輸出由運算元序列1,2,…,n,經過一系列操作可能得到的輸出序列總數。

輸入

乙個整數n(1<=n<=15)

輸出

乙個整數,即可能輸出序列的總數目。

樣例輸入 copy

3樣例輸出 copy

5提示

先了解棧的兩種基本操作,進棧push就是將元素放入棧頂,棧頂指標上移一位,等待進棧佇列也上移一位,出棧pop是將棧頂元素彈出,同時棧頂指標下移一位。

用乙個過程採模擬進出棧的過程,可以通過迴圈加遞迴來實現回溯:重複這樣的過程,如果可以進棧則進乙個元素,如果可以出棧則出乙個元素。就這樣乙個乙個地試探下去,當出棧元素個數達到n時就計數一次(這也是遞迴呼叫結束的條件)。

第一種辦法用遞迴本身是棧模擬

第二種辦法直接把全排列列出來,比較容易理解,然後根據性質篩選掉,數列中不符合的數列。

這裡只提供第一種方法

#include#includeusing namespace std;

int n;

int cnt;

void dfs(int outl,int in,int outr)

if(outl>0&&in0&&outrdfs(outl,in-1,outr+1);

}int main()

問題 E 遞迴入門 出棧序列統計

題目描述 棧是常用的一種資料結構,有n令元素在棧頂端一側等待進棧,棧頂端另一側是出棧序列。你已經知道棧的操作有兩 種 push和pop,前者是將乙個元素進棧,後者是將棧頂元素彈出。現在要使用這兩種操作,由乙個操作序列可以得到一系列的輸出序列。請你程式設計求出對於給定的n,計算並輸出由運算元序列1,2...

演算法筆記 問題 E 遞迴入門 出棧序列統計

題目描述 棧是常用的一種資料結構,有n令元素在棧頂端一側等待進棧,棧頂端另一側是出棧序列。你已經知道棧的操作有兩 種 push和pop,前者是將乙個元素進棧,後者是將棧頂元素彈出。現在要使用這兩種操作,由乙個操作序列可以得到一系列的輸出序列。請你程式設計求出對於給定的n,計算並輸出由運算元序列1,2...

遞迴入門 出棧序列統計

棧是常用的一種資料結構,有n令元素在棧頂端一側等待進棧,棧頂端另一側是出棧序列。你已經知道棧的操作有兩 種 push和pop,前者是將乙個元素進棧,後者是將棧頂元素彈出。現在要使用這兩種操作,由乙個操作序列可以得到一系列的輸出序列。請你程式設計求出對於給定的n,計算並輸出由運算元序列1,2,n,經過...