Skip to content

Instantly share code, notes, and snippets.

@esrever10
Last active December 29, 2015 13:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save esrever10/7677241 to your computer and use it in GitHub Desktop.
Save esrever10/7677241 to your computer and use it in GitHub Desktop.
#include <cstdio>
#include <vector>
#include <bitset>
#include <climits>
#include <iostream>
using namespace std;
#define MAX 15
vector<bitset<MAX> > vec;
int P = 0;
int N = 0;
bitset<MAX> flag;
int minre = INT_MAX;
void dfs (int cur) {
if (cur == P) {
bool f = true;
for (int i = 0; i < N; ++i) {
for (int j = i + 1; j < N; ++j) {
bitset<MAX> l = vec[i];
bitset<MAX> r = vec[j];
l = l & flag;
r = r & flag;
if (l == r) {
f = false;
}
}
}
if (f) {
if (flag.count() < minre) {
minre = flag.count();
}
}
} else {
flag[cur] = 0;
dfs(cur + 1);
flag[cur] = 1;
dfs(cur + 1);
}
}
int main()
{
int T = 0;
scanf("%d", &T);
for (int i = 0; i < T; ++i) {
scanf("%d%d", &P, &N);
flag.reset();
vec.clear();
minre = INT_MAX;
for (int j = 0; j < N; ++j) {
bitset<MAX> t;
for (int k = 0; k < P; ++k) {
int temp = 0;
scanf("%d", &temp);
t[k] = temp;
}
vec.push_back(t);
}
dfs(0);
printf("%d\n", minre);
}
return 0;
}
@xswang
Copy link

xswang commented Nov 27, 2013

good!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment