zoukankan      html  css  js  c++  java
  • 92.递归实现指数类型枚举

    原题链接:92. 递归实现指数型枚举

    解题思路

    这等价于每个整数可以选可以不选,所有可能的方案总数有2的n次方种,通过前两节的学习我们已经知道可以进行一次循环,利用位运算来列举所有的选择方案。这一次我们使用递归来求解,在每一次递归中分别尝试某个数“选”还是“不选”两条分支,将尚未确定的整数数量减少1,从而转化为一个规模更小的同类问题。

    样例代码

    #include <iostream>
    using namespace std;
    
    vector<int> chosen;
    
    void calc(int x) {
          if(x == n+1) { //边界问题
                for(int i = 0;i < chosen.size(); i++)
                      pritnf("%d ", chosen[i]);
                puts("");
                return;
          }
          //“不选x”分支
          calc(x+1);
          //“选x”分支
          chosen.push_back(x);//记录x已经被选择
          calc(x+1);//求解子问题
          chosen.pop_back();//准备回溯到上一个问题之前,还原现场      
    }
    int main(){
          calc(1);//主函数中的调用入口
    }
    
  • 相关阅读:
    LCT
    Knights0.
    Beautiful Sequence
    Mole and Abandoned Mine
    防御准备
    最小生成树计数
    Miners
    朝暮(枚举基准 容斥)
    Dynamic Rankings(整体二分)
    BZOJ 3875 Ahoi2014 骑士游戏
  • 原文地址:https://www.cnblogs.com/hnkjdx-ssf/p/14155688.html
Copyright © 2011-2022 走看看