zoukankan      html  css  js  c++  java
  • 递归型枚举总结

    这类枚举题目基本依靠$dfs$然后回溯的方法即可完成

    一、递归指数型枚举

    题意:

    给出$n$,从$1$至$n$中随机选择任意多个,输出可能的选择方案。

    题解:

    首先开一个栈,记录每一层的起点将它加入到栈中,然后下一层一定会从这个起点的下个点出发,然后把它加入栈中,下一层再从其下一个点出发。然后当层数到达设置的值时则输出栈中内容然后回溯退栈,再从该层的标记点的第$2,3......$个点出发继续递归,如果超过$n$则直接返回。最后枚举层数从$0$至$n$即可。

    AC代码见acwing92。

    二、递归组合型枚举

    题意:

    给出$n$和$m$,求从$1$到$n$当中选择$m$个数的方案。

    题解:

    上一题固定层数为$m$即可。

    AC代码见acwing93。

    三、递归排列型枚举

    题意:

    用递归的方法输出$n$所有的排列。

    题解:

    其实直接使用$next-permutation$就行,但是我们这次使用递归,我们直接将标记全部从$1$开始,然后使用一个$vis$数组记录该数是否已经被访问,如果没有就选,然后标记$vis$,继续递归,回溯时消除$vis$标记即可。

    AC代码见acwing94。

  • 相关阅读:
    tailf,tail -f,tail -F区别
    Java多线程知识总结(一)
    MyBatis使用总结
    mina学习总结
    好书推荐
    Hessian总结
    Spring总结
    SpringMVC总结
    判断两个IP是否处于同一子网(网段)
    Delphi Json之树遍历
  • 原文地址:https://www.cnblogs.com/Aya-Uchida/p/11872540.html
Copyright © 2011-2022 走看看