题目描述:
栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。
它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,
需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
现在给出要入栈的元素数n,每种元素各不相同,求不同的出栈序列数目。
输入描述:
要入栈的元素数n,处理到文件尾
1<=n<=100
输出描述:
出栈序列方案数,结果对1000000007取模.
输入:
1
3
输出:
1
5
题意:
题目描述
题解:
卡特兰数
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long ll;
const int maxn = 100 + 5;
const ll mod = 1000000007;
ll f[maxn];
void init(){
f[0] = 1;
f[1] = 1;
f[2] = 2;
for(int i = 3; i <= 100; i ++){
for(int j = 0; j < i; j ++){
f[i] += ((f[j] % mod) * (f[i - j - 1] % mod)) % mod;
f[i] %= mod;
}
}
}
int main(){
int n;
init();
while(scanf("%d",&n)!=EOF){
printf("%lld\n",f[n]);
}
return 0;
}