本题的人数只有n<=15,这就非常强烈地暗示了我们用二进制的bit mask来暴力枚举所有“好人”的可能组合。对于任意一种组合,我们只需要用o(n^2)的时间检查一遍。所以总的时间复杂度是2^15*15^2=7e6
是可以接受的。
当我们考虑一种好人组合,如何判定它是否可行呢?我们需要注意三点:就是这些好人做出的判断不能彼此矛盾;好人认定的“好人”一定要出现在组合中;好人认定的“坏人”一定不能出现在组合中。满足这三点,那么这种好人组合就没有问题。
此外,本题可以用Gosper's hack,从好人多到好人少的组合依次遍历,找到合适的组合后即可提前终止。