zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    kafka在线修改topic配置
    DateFormat采坑
    mysql ifnull 取反值;case when null的使用
    pip常用命令
    zip压缩
    Solaris 10 x86-64 虚拟机配置
    正则学习
    vnc
    window10创建系统服务
    java内存对象clone
  • 原文地址:https://www.cnblogs.com/AlexPanda/p/12631435.html
Copyright © 2011-2022 走看看