我受不了了,这题做一次忘一次,到头来还是不会做/px
思路
由于一个变色龙吃了一个红球之后还可以白吃一个蓝球,并且再吃红球不优,所以容易想到一个贪心判序列是否合法的方法:在\([1,n-1]\)都变红之前红球全都给还没有变红的变色龙,蓝球如果能给\([1,n-1]\)中只吃了一个红球的变色龙就给,否则给第\(n\)个变色龙;\([1,n-1]\)都变红之后红球全部给第\(n\)个变色龙,蓝球给的策略和之前相同。
然后如何计数呢?
设红球有\(R\)个,蓝球有\(B\)个,那么显然要满足\(R\ge B\)。
容易发现是否合法主要和第\(n\)条变色龙能否变成红色有关,也就主要和第\(n\)条变色龙吃的蓝色球有关。令\(t=R-(n-1)\),显然第\(n\)条变色龙吃了\(t\)个红球。
令红球为1,蓝球为-1,那么仔细分析一下,发现在出现\(n-1\)个红球之前第\(n\)条变色龙吃的蓝球数就是最小前缀和。显然在这一段需要满足最小前缀和\(>-t\)。
在第\(n-1\)个红球出现之后情况比较复杂,我们稍微分一下类。
\(R>B\)
考虑\(n-1\)个红球之后的蓝球,如果这些蓝球能被前\(n-1\)个红球抵消掉,那么第\(n\)条变色龙吃的蓝球数就一定\(<t\);如果不能全部抵消,那么就相当于前\(n-1\)个红球全都匹配了一个蓝球,而又有\(R>B\),所以第\(n\)条变色龙吃的红球数是大于蓝球数的。所以,后面不管什么顺序都是合法的。
与此同时,你发现后面不管怎么排,整体都满足最小前缀和\(>-t\),所以在\(R>B\)时最小前缀和\(>-t\)是充要条件。
\(R=B\)
此时显然如果要合法,那么每一个红球都需要匹配一个蓝球。而且为了第\(n\)个变色龙能够顺利变成红色,还需要第\(K\)个球是蓝色的。
第\(K\)个球是蓝色很好搞,问题是如何保证\([1,n-1]\)的变色龙全都拿到一红一蓝呢?
好吧,你发现只要第\(n-1\)个红球之前的最小前缀和\(<-t\),那么后面也是一定可以匹配上的。
与此同时,由于我们强制第\(K\)个球是蓝色的,所以此时后面不管怎么排,整体都满足最小前缀和\(>-t\),所以在\(R=B\)时“最小前缀和\(>-t\)且最后一个球是蓝色”是充要条件。
于是卡特兰数的方法分析一下就好了。
代码
咕了。