1 条题解

  • 0
    @ 2026-9-3 11:04:16

    数字钱包 题解

    思路

    把最终取到的元素按列计数。前 ii 列中被取元素的数量记为 jj。存在合法操作顺序,当且仅当处理完第 ii 列后

    max⁡(0,i−K+1)≤j≤min⁡(i,M−K+1).\max(0,i-K+1)\le j\le\min(i,M-K+1).

    这是区间匹配的 Hall 条件:前缀不能选得过多,否则没有足够的早期操作;也不能选得过少,否则后面的操作窗口无法再覆盖足够元素。

    做法

    子任务 1 直接枚举每次操作选择的矩阵元素,用位掩码记录已取元素,复杂度为指数级。

    子任务 2 进行零一背包。按列处理每个元素,令 dpjdp_j 为当前选取 jj 个元素的最大总和;每列结束后删去不满足上述范围的状态。复杂度为 O(NM2)O(NM^2)。

    满分做法利用 dpdp 关于 jj 的离散凹性。维护相邻状态差分

    dj=dpj−dpj−1d_j=dp_j-dp_{j-1}

    组成的多重集合。加入一个值为 ww 的元素,对应把 ww 插入差分集合。每列处理完后:

    • 为满足右端上界,只保留最大的若干差分,删除最小值;
    • 当左端下界增加一时,必须多选一个元素,把当前最大差分加入答案并删除。

    集合大小始终不超过 KK,因此每个元素只需一次 O(log⁡K)O(\log K) 的插入或删除。

    独立答案程序使用另一条路径:把所有元素按权值从大到小尝试加入区间匹配的独立集,并用 Hall 条件与两棵线段树判断本次加入是否仍可匹配。这是转移结构独立的拟阵贪心验证。

    复杂度

    • 子任务 1:指数时间,空间 O(NM)O(NM);
    • 子任务 2:时间 O(NM2)O(NM^2),空间 O(M)O(M);
    • 满分算法:时间 O(NMlog⁡K)O(NM\log K),空间 O(K)O(K)(读入矩阵需要 O(NM)O(NM) 或按列存储)。
    • 1

    信息

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