<前言>
(这只是一个我们自己的模拟赛啊。。。)
大佬们可以看看题目。
<正文>
简要题意:
求n对括号匹配中恰好有m对失配的方案数。
(Solution)
扯 题外 话:
首先,我们发现n对括号恰好完全匹配的方案数就是卡特兰数,这个应该是一个常识了(然而我在考试的时候没想出来。。。)
再看看文件名,扩展卡特兰数,说明我们思路对了但是我们要的是恰好有m对失配的情况,这咋搞呢。
实际上看似不可做,在求卡特兰数的时候魔改一下公式就可以啦。
然而为什么呢?
有一种求卡特兰数的方法叫折线法。
这种方法有什么妙用呢?
我们知道一个卡特兰数的模型:在n*n矩阵上不过对角线的左下角到右上角的方案数就是第n项卡特兰数了。
还有一个模型是进出栈的问题,合法出栈顺序数。
我们把坐标轴倾斜一下,把对角线贴在x轴上,发现等价于不过x轴的,从原点到2n合法方案数。其中我们走的是一条折线,向上倾表示进栈,下斜表示一次出栈。
为什么是2n呢?具体我也不会证明,大概就是原本对角线是不能经过的,现在可以经过就要改变终点。
(以下内容参考这里)
上面有图,可以帮助理解。
整个过程认为是从坐标(0,0)走到(2n,0)。因为栈内必须要有元素,所以,折线不能在x轴下方,这样才是合法的。
不合法的方案呢?就是跨过了x轴,但仍然最终到达了终点的方案。
好的现在我们引入了这个模型,那么根据一些小知识合法方案=总方案-非法方案。
现在我们要求总方案。
即2n次操作,操作种类为2,要求每种操作次数相同,那相当于一个组合数问题,即(frac {(2n)!}{n! imes n!}),也可以写成(inom{2n}{n})
接下来考虑非法方案。
即至少有一时刻折线处于x轴下方。
-
对于任意跨越x轴的情况,必有将与(y=-1)相交。
-
找出第一个与(y=-1)相交的点k,将k点以右的折线根据(y=-1)对称(即操作1与操作2互换了)。可以发现终点最终都会从((2n,0))对称到((2n,-2))。
-
由于对称总是能进行的,且是可逆的。我们可以得出所有跨越了x轴的折线总数是与从((0,0))到((2n,-2))的折线总数。
而后者的操作2比操作1要多(0-(-2)=2)次。即操作1为n-1,操作2为n+1。
-
总数为(inom{2n}{n-1})。
接下来减一下就可以发现卡特兰数的通项公式了。
本题题解:
讲了这么多,和这题有什么关系呢?
正常卡特兰数不能越过(y=0)线,相当于没有任何一次可以失配的机会。
本题所求的恰好m对失配,由折线法可以证明是(inom{2n}{n-m}-inom{2n}{n-m-1})
就好像差分一样嘛!
这个推广恰好符合扩展卡特兰数,就是正解了。。(然而我考场上还是不会)
<后记>
AFO,没什么可说的