题面很短,别的博客也讲了就不说题意了。
做法:
异或是没有进位的加法,所以ai + 1的二进制最高位要大于ai的二进制最高位,才能满足ai递增,bi也递增的条件。呐这样的话,选了4,(5,6,7)就都不能选了,只能选比7大的数。
这样分析下来a数组最长也只有30,(2^30>1e9)
直接按照数字大小dp会TLE
思路角度1:换一个角度,我们把二进制最高位相同的看作一组,因为这一组内只能选一个数。
有点像分组背包。但是我们现在只看分组背包的方案数,所以就不用枚举每一组内的物品了。
dpij表示考虑到前i组,选了其中j组的方案数。
cnt[i]表示第i组有多少个
dpij += dpi-1j-1*cnt[i] 考虑要第i组
dpij += dpi-1j 考虑不要第i组
然后就可以了
我写的时候顺便空间优化了下
https://paste.ubuntu.com/p/YjzM6RmPWC/
思路角度2:换一个角度,我们把二进制最高位相同的看作一组
dpi 表示以第i组为结尾的序列的方案数。
cnt[i]表示第i组有多少个
dpi += dpk * cnt[i] (k 从0枚举到i - 1)