serna37's Library

Logo

C++ アルゴリズムとデータ構造のライブラリ

View the Project on GitHub serna37/library-cpp

:heavy_check_mark: bit全探索
(library/search/bit_search.hpp)

bit全探索

できること

計算量

$O(2^N)$ Nは20前後まで

使い方

vector<vector<int>> tmp = bit_search(A);

Verified with

Code

#pragma once
template <typename T> vector<vector<T>> bit_search(const vector<T> &A) {
    int N = A.size();
    vector<vector<T>> res;
    for (long long bit = 0; bit < (1ll << N); ++bit) {
        vector<T> tmp;
        for (int k = 0; k < N; ++k) {
            if (bit & (1ll << k)) {
                tmp.push_back(A[k]);
            }
        }
        res.push_back(tmp);
    }
    return res;
}
#line 2 "library/search/bit_search.hpp"
template <typename T> vector<vector<T>> bit_search(const vector<T> &A) {
    int N = A.size();
    vector<vector<T>> res;
    for (long long bit = 0; bit < (1ll << N); ++bit) {
        vector<T> tmp;
        for (int k = 0; k < N; ++k) {
            if (bit & (1ll << k)) {
                tmp.push_back(A[k]);
            }
        }
        res.push_back(tmp);
    }
    return res;
}
Back to top page