模型一:进出序列。
求解:给定n个的数,有多少种出栈序列?(抽象成一个有n个1和n个-1组成的字串,且前k个数的和均不小于0,那这种字串的总数为多少?)
容斥可得 ans(合法) = ans(all) - ans(不合法)
ans(all) = C(2n,n) //任选n个位置放1.
首选,我们将这个字符串看成二进制,那么对于每个不合法的方案数,一定是前缀和 = -1的第一个位置,也就是2 * m + 1的位置处是-1.
前面m个1,m个-1.那么剩下(2 * n - (2 * m + 1)) = 2 * (n - m) - 1个位。
我们将这些位都翻转,可得这个字符串由n + 1个 - 1和n - 1个1组成,并且我们可以发现,对于由(n + 1)个-1和(n - 1)个+1组成的字符串,一定都存在前缀和 -1的第一个位置,我们将剩下的位置反转。
就都对应着n 个 1和n 个 -1组成的不合法字符串,所以对于所有(n + 1)个-1和(n - 1)个1组成的字符串,都对应着n 个 1和n 个 -1组成的不合法字符串.
所以ans(不合法) = C(2n,n + 1)//任选n + 1个位置放-1.
所以ans(all) = C(2n,n) - C(2n,n + 1) = C(2n,n) / (n + 1).
标签:位置,合法,ans,字符串,2n,卡特兰,组成 来源: https://www.cnblogs.com/zwjzwj/p/15037961.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。