题目背景
usqwedf 改编系列题。
题目描述
如果你在百忙之中抽空看题,请自动跳到第六行。
众所周知,在中国古代算筹中,红为正,黑为负……
给定一个1*(2n)的矩阵(usqwedf:这不是一个2n的队列么),现让你自由地放入红色算筹和黑色算筹,使矩阵平衡[即对于所有的i(1<=i<=2n),使第1~i格中红色算筹个数大于等于黑色算筹]
问有多少种方案满足矩阵平衡。
见样例解释。
输入输出格式
输入格式:正整数 n
输出格式:方案数t对100取模
输入输出样例
输入样例#1:
2
输出样例#1:
2
说明
样例解释: 红 黑 红 黑
红 红 黑 黑
1<=n<=100
将红看成是入栈操作,黑看成是出栈操作,那么显然任意时刻红多于黑就意味着出栈操作必须在栈不为空时进行。
于是该问题就转化成了求出栈序列,也就是卡特兰数。
附代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
long long n,f[110];
int main(){
scanf("%lld",&n);
f[0]=f[1]=1;
for(int i=2;i<=n;i++)
for(int j=0;j<i;j++){
f[i]+=f[j]*f[i-j-1];
f[i]%=100;
}
printf("%lld\n",f[n]%100);
return 0;
}