1 条题解

  • 0
    @ 2025-8-22 16:02:04

    我们先定义 关键数:加入该数后能使 mex(S)mex(S) 增大。在加入关键数 xx 前,最多只能得到小于 xxmexmex。关键数严格递增,因此满足 xi+1xi+1x_i+1 \le x_{i+1}。根据 等差数列求和公式 易得关键数的个数至多为 r=min(W,K)r=\min(\sqrt{W},K)

    我们将所有的关键数用数组 dd 记录下来,例如:初始 S=(0,2)S=(0,2),则关键数为 d[1]=1,d[2]=3d[1]=1,d[2]=3

    fk,i,jf_{k,i,j} 表示第 kk 次操作后,已用 ii 个关键数,总花费为 jj 的方案数。转移为:

    $$f_{k,i,j} = f_{k-1,i-1,j-d[i]} + \sum_{g=\max(0,\,j-d[i+1]+1)}^{j} f_{k-1,i,g}$$

    初始状态:f0,0,0=1f_{0,0,0}=1,表示还未选择任何数,预算为 0 时只有 1 种方案。

    对非关键数的转移是区间和,因此我们可以用 前缀和/双指针O(1)O(1) 地完成转移。这样就避免了暴力枚举。由于 DP 的第一维 kk 只依赖于上一层,因此可以使用 滚动数组 优化内存,将空间降为 O(rW)O(rW)

    复杂度:时间 O(KrW)O(KrW),空间 O(rW)O(rW)

    • 1

    信息

    ID
    452
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    递交数
    2
    已通过
    1
    上传者