C++ アルゴリズムとデータ構造のライブラリ
#include "library/search/bit_search.hpp"{1,2,3}
↓
{ {},{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3} }
$O(2^N)$ Nは20前後まで
vector<vector<int>> tmp = bit_search(A);
#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;
}