出棧序列統計(vijos1122) DFS版

2021-05-31 22:09:40 字數 1108 閱讀 7531

演算法:搜尋

這個就比較內涵了,因為只有入棧和出棧兩種情況。

1.當剩餘數大於0的時候對應入棧操作(棧+1,剩餘數-1)。

2.當棧數大於0的時候對應出棧操作(棧-1,剩餘數不變)。

注意以上兩個步驟是同時進行的。而完成一次操作的標誌就是:

棧數=剩餘數=0,這種情況表示一次棧操作完成。

注意要用到另乙個語句。

program vj1122;

const

maxn=15;

var n,ans,stack,rest:longint;

procedure pop(stack,rest:longint);

forward;

procedure push(stack,rest:longint);

forward;

procedure pop(stack,rest:longint);

begin

if (stack=0) and (rest=0) then

begin

inc(ans);

exit;

end;

if stack>0 then pop(stack-1,rest);

if rest>0 then push(stack+1,rest-1);

end;

procedure push(stack,rest:longint);

begin

if stack>0 then pop(stack-1,rest);

if rest>0 then push(stack+1,rest-1);

end;

begin

assign(input,'vj1122.in'); reset(input);

assign(output,'vj1122.out'); rewrite(output);

readln(n);

stack:=0;

rest:=n;

ans:=0;

push(stack,rest);

writeln(ans);

close(input); close(output);

end.

出棧序列統計

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

出棧序列統計

棧是一種常見的資料結構,有許多關於棧的問題,其中之一就是統計元素可能的出棧序列。具體說,就是給定n個元素,依次通過乙個棧,求可能的出棧序列的個數。如果我們用直接模擬的方法,當n較大時會很費時間 另一種方法是利用組合數學求出棧序列個數,得到公式 下面我們來看一種圖形化的方法證明這個等式,很容易理解的。...

出棧序列統計

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