测评记录 数据: 3 3 1 -1 1 0 1 -1 0 0 1 输出:3 本代码输出-1
#include<bits/stdc++.h>
using namespace std;
int n, m, s, a[125][25], dp[1025];
int main() {
cin >> n >> m;
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
cin >> a[i][j];
}
}
memset(dp, 0x3f, sizeof dp);
dp[0] = 0;
for (int i = 0; i < (1 << n); i++) {
// cout << dp[i] << "\n";
for (int j = 1; j <= m; j++) {
int s = i;
for (int k = 1; k <= n; k++) {
int t = 1 << (k - 1);
if (a[j][k] == 1 && !(s & t)) {
s ^= t;
} else if (a[j][k] == -1 && (s & t)) {
s ^= t;
}
}
dp[s] = min(dp[s], dp[i] + 1);
//cout<<bitset<10>(s)<<" "<<dp[s]<<"\n";
}
}
if (dp[(1 << n) - 1] >= 100000) cout << -1;
else cout << dp[(1 << n) - 1];
return 0;
}