使用位运算枚举集合中所有的情况(辅助容斥原理)
枚举所有集合的情况可以用位运算来枚举
可以写成 for ( i = 1; i < k; i++ )
将i看成一个二进制数,每个数有 \(logk\) 位,位数不足的话最高位补零。
如有 \(5\) 位,则 \(5\) 的二进制表示位 \(00101\)
如果当前位为零,说明当前位没有选,如果当前位为一,则说明这个位被选了
每个数都对应一种选法,所以可以遍历所有情况。
for ( i = 1; i < k; i++ )
{
for ( int j = 0; j < log( k ); j++ )
{
if ( i >> j & 1 )
{
solve();
if ( check() )
{
flag = true;
break;
}
}
}
if ( flag ) option();
}

浙公网安备 33010602011771号