1. 程式人生 > >caioj.cn 1036: 遞迴6(統計出棧)

caioj.cn 1036: 遞迴6(統計出棧)

題目描述

【題意】
1~n依次入棧,統計不同的出棧的方式
棧是常用的一種資料結構,有n令元素在棧頂端一側等待進棧,棧頂端另一側是出棧序列。你已經知道棧的操作有兩•種:push和pop,前者是將一個元素進棧,後者是將棧頂元素彈出。現在要使用這兩種操作,由一個操作序列可以得到一系列的輸出序列。請你程式設計求出對於給定的n,計算並輸出由運算元序列1,2,…,n,經過一系列操作可能得到的輸出序列總數。
【輸入格式】
一個整數n(1<=n<=15)
【輸出格式】
一個整數,即可能輸出序列的總數目。
【樣例輸入】
3
【樣例輸出】
5

直接變為卡特蘭數

#include<cstdio>
#include<cstring>
using namespace std;
int n;
long long a[2];
int main()
{
	scanf("%d",&n);
	a[1]=1;
	for(int i=2;i<=n;i++) a[i&1]=a[i&1^1]*(4*i-2)/(i+1);
	printf("%lld\n",a[n&1]);
	return 0;
}