T1 元素计数
for for,水题莫忘暴力
T4 基于陈述统计最多好人数
题意简述
好人说真话,坏人不确定。给出statements[i][j]表示i号人对j号人的好坏评价,0坏1好。求好人最多有几个。
算法分析
由于总人数n<=15,直接二进制枚举所有人的好坏情况,判断有无冲突即可。
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| class Solution { public: int maximumGood(vector<vector<int>>& statements) { int n = statements.size(); int ans = 0; for (int mask = 1; mask < (1 << n); ++mask) { bool check = [&]() { for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { if (i == j) { continue; } if (statements[i][j] == 0) { if ((mask & (1 << i)) && (mask & (1 << j))) { return false; } } else if (statements[i][j] == 1) { if ((mask & (1 << i)) && !(mask & (1 << j))) { return false; } } } } return true; }(); if (check) { ans = max(ans, __builtin_popcount(mask)); } } return ans; } };
|