zoukankan      html  css  js  c++  java
  • 【数据结构与算法】进出栈方案数问题

    进出栈方案数问题

    让n个数字依次进栈,求不同的出栈序列的种类个数。

    首先可以对问题进行一个转化,脱去数字本身的特性,单纯将出栈序列的序列看成是由进栈和出栈两种操作来构成的序列,其中我们可以令1代表入栈,0代表出栈。

    而当出栈序列是非法的时候,就是在说栈为空时,仍然进行出栈操作,换成01串进行理解,也就是说,在整个01串中,存在某一个位置,且这个位置前面的操作0的个数大于1的个数,即说明这是非法的。

    那么,我们要求出所有可行的方案,我们可以换一个角度。

    合法方案数 = 总方案数 - 非法方案数

    总方案数 = 给你2n个位置,先填入n个1,其他空余位置补上0 = \(C_{2n}^{n}\)

    在计算非法方案数,我们可以稍微做一下转换。

    (注意这里都是非法的,无论怎么转换的话)假设定在某个位置,这个位置前有p个1,p+1个0, 那么在这个位置后有n-p个1,n-(p+1)个0,在这里,我们可以稍微做一个转换,在这个位置后有n-p个"0",n-(p+1)个"1",所以此时2n个位置共有n+1个"0",n-1个"1"。

    所以非法的方案数为\(C_{2n}^{n-1}\)

    所以合法的方案数 = \(C_{2n}^{n}-C_{2n}^{n-1}\)

  • 相关阅读:
    linux启动流程
    控制nginx并发链接数量和客户端请求nginx的速率
    MySQL修改密码
    nginx站点目录及文件URL访问控制
    nginx日志相关优化安全
    根据参数优化nginx的服务性能
    nginx基本安全优化
    nginx rewrite
    nginx location
    nginx访问日志(access_log)
  • 原文地址:https://www.cnblogs.com/BeautifulWater/p/15676707.html
Copyright © 2011-2022 走看看