题解 P1044 【栈】
从题目以及众多题解,我们可以知道这道题是一道卡特兰数,而卡特兰数的最终算数表达式子为:
证明过程:
我们已经知道,栈有两种操作,入栈和出栈。对此,我们可以建立一个坐标系。
像这样:
我们可以把:
黄色的线作为入栈操作,由
绿色的线作为出栈操作,由
这样,我们就可以把问题转化为从
我们先来考虑这样一个问题,因为我每一次操作都可以让
但是!!!
我们这样,会出现非法的情况,也就是线越过
对于这种情况,我们可以设
因为我们现在的终点变成了
根据组合数的定义:
化简可以得到最终答案为
Code:
n=int(input())
m=2*n
a=1
for i in range(1,m+1):#计算(2n)!
a=a*i
b=1
for i in range(1,n+2):#计算(n+1)!
b=b*i
c=1
for i in range(1,n+1):#计算n!
c=c*i
ans=int(a/(b*c))
print(ans)