题目大意
有种物品都被选出的方案数。
70分算法
正难则反。 考虑用所有方案数减去不合法的方案数。所有方案数显然是。 接下来我们枚举少了哪些元素作为不合法的方案,然后利用容斥原理,,枚举它的子集得到至少少了这些元素的箱子个数,否则加上。
时间复杂度
100分算法
我觉得满分算法比较神。它是利用分治把所有的一齐算出来。 考虑我们现在要算出区间的答案。 区间二进制首位都为。 而对应位置上右区间只是比左区间多了开头的一个,故左区间的每个位置必定是右区间的对应位置上的子集。那么我们只需要递归计算左右的答案,然后把左边的加到右边去就可以了。
后记
这种分治策略有印象不是第一次见了,和也有点异曲同工之妙,记住它吧。
生命不在长而在于好,只要每一次尽力的演示,都值得鼓励与喝采。