class Solution {
public:
int maximumGood(vector<vector<int>> &statements) {
int ans = 0, n = statements.size();
for (int i = 1; i < 1 << n; ++i) {
//让 i 从 1 枚举到 2^n-1
//i中第x位置上为1,则第x个人为好人。
//i中第x位置上为0,则第x个人为坏人。
int cnt = 0; // i 中好人个数
for (int j = 0; j < n; ++j) {
if ((i >> j) & 1) { // 枚举 i 中的好人 j
//枚举在 i 这种情况下,如果第j位是好人
for (int k = 0; k < n; ++k) { // 枚举 j 的所有陈述
if (statements[j][k] < 2 && statements[j][k] != ((i >> k) & 1)) { // 该陈述与实际情况矛盾
//看j是否说的都是真话,只要说了谎就下一个
goto next;
}
}
++cnt;
}
}
ans = max(ans, cnt);
next:;
}
return ans;
}
};
作者:endlesscheng
链接:https://leetcode-cn.com/problems/maximum-good-people-based-on-statements/solution/er-jin-zhi-mei-ju-by-endlesscheng-ttix/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。