递归实现指数型枚举

简介: 递归实现指数型枚举

1∼nn 个整数中随机选取任意多个,输出所有可能的选择方案。

输入格式

输入一个整数 n

输出格式

每行输出一种方案。

同一行内的数必须升序排列,相邻两个数用恰好 11 个空格隔开。

对于没有选任何数的方案,输出空行。

本题有自定义校验器(SPJ),各行(不同方案)之间的顺序任意。


数据范围

1≤n≤15

输入样例:

3

输出样例:

3
2
2 3
1
1 3
1 2
1 2 3
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 16;
int n;
int st[N];  //记录每个位置当前状态 0还没考虑 1选他 2不选他
int ways[1 << 15][16], cnt;
void dfs(int u)
{
    if (u > n)
    {
        for (int i = 1; i <= n; i++)
        {
            if (st[i] == 1)
            {
                ways[cnt][i] = i;
            }
        }
        cnt++;
        return;
    }
    st[u] = 2;
    dfs(u + 1);  //第一个分支 不选
    st[u] = 0;   //恢复现场
    st[u] = 1;
    dfs(u + 1);  //第二个分支 选
    st[u] = 0;
}
int main()
{
    cin >> n;
    dfs(1);
    for (int i = 0; i < cnt; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            if(ways[i][j]!=0)
            {
                printf("%d ", ways[i][j]);
            }
        }
        puts("");
    }
    return 0;
}
目录
相关文章
92. 递归实现指数型枚举
92. 递归实现指数型枚举
|
7月前
|
存储 算法 测试技术
位运算、状态压缩、枚举子集汇总
位运算、状态压缩、枚举子集汇总
|
7月前
|
人工智能 测试技术
【位运算 状态压缩 枚举子集】1178. 猜字谜
【位运算 状态压缩 枚举子集】1178. 猜字谜
|
7月前
递归实现指数型枚举
递归实现指数型枚举
32 0
不用任何比较运算符找出两个整数中的较大的值
不用任何比较运算符找出两个整数中的较大的值
93 0
|
存储 C语言
C语言四舍五入计算方法(包含各种精度)
C语言四舍五入计算方法(包含各种精度)
1033 0
|
C++
C++ 计算斐波那契数列第100万项的精确整数值
C++ 计算斐波那契数列第100万项的精确整数值
121 0
枚举的三种类型--指数型&排列型&组合型
枚举的三种类型--指数型&排列型&组合型
113 0