1 条题解

  • 0
    @ 2026-9-9 9:16:23

    题解

    思路

    按数值从小到大处理操作,因为较小的数合并后可能产生较大的数,反向则不会影响已经处理过的层。

    做法

    设 dp[j]dp[j] 表示处理完所有小于 xx 的数后,当前有 jj 个 xx 的方案数;若输入中本来有 bxb_x 个 xx,选择合并 kk 次后会留下 j+bx−2kj+b_x-2k 个 xx,并向下一层传递 kk 个 x+1x+1,因此对每个 jj 都向 k=0,1,…,⌊(j+bx)/2⌋k=0,1,\ldots,\lfloor(j+b_x)/2\rfloor 转移。

    用差分前缀和完成这一段区间转移。第 xx 层可能出现的最大个数不超过 ∑i≤xbi2i/2x\sum_{i\le x}b_i2^i/2^x,把各层上界相加至多为 2N2N,再计入空层后所有状态数组总长度为 O(N+max⁡A)O(N+\max A);处理到 max⁡A+O(log⁡N)\max A+O(\log N) 即可得到答案。

    复杂度

    时间和空间复杂度均为 O(N+max⁡A)O(N+\max A)。

    • 1

    信息

    ID
    1631
    时间
    2000ms
    内存
    1024MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者