for (int sub = S;sub; sub = (sub - 1)&S) //sub为子集 大小为k的集合朴素的枚举是3的k次方的,此种枚举方法最差2的k次方,正确性在于((sub-1)∩S,sub)间没有S的子集。正确性对二进制下的sub,sub-1,(sub-1)∩S进行分析可证。