基于陈述统计最多好人数
好人:该角色只说真话。
坏人:该角色可能说真话,也可能说假话
每个人都有对其他人的描述,存为一个n×n的二维矩阵
0认为是坏人,1认为是好人,2不做评价
返回最大好人数目
1. 暴力列举 + 二进制状态位
基于矛盾判断该状态是否有效
class Solution {
public:
int maximumGood(vector<vector<int>> &statements) {
int ans = 0, n = statements.size();
for (int i = 1; i < 1 << n; i++) {//枚举所有状态
bool flag = 1;//该状态有效
int cnt = 0; // i 中好人个数
for (int j = 0; j < n; ++j) {//从右往左判断每一位
if ((i >> j) & 1){ // 枚举 i 中的好人 j
for (int k = 0; k < n; k++) // 枚举 j 的所有陈述
if (statements[j][k] < 2 && statements[j][k] != ((i >> k) & 1)){ // 该陈述与实际情况矛盾
flag = false;
break;
}
if(!flag) break;//有矛盾存在,该状态不符
++cnt;
}
}
if(!flag) continue;
ans = max(ans, cnt);
}
return ans;
}
};