Codeforces Round #631 (Div. 2) Dreamoon Likes Sequences

题面很短,别的博客也讲了就不说题意了。

做法:

异或是没有进位的加法,所以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)

https://paste.ubuntu.com/p/vxPHns2YVJ/

猜你喜欢

转载自www.cnblogs.com/AlexPanda/p/12631435.html