1 条题解

  • 0
    @ 2025-8-24 23:15:20

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar HP_Serenity
    不拿7勾不改签

    搬运于2025-08-24 23:15:20,当前版本为作者最后更新于2025-05-17 13:08:20,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    第一次场蓝,写篇题解纪念下。

    关于符号的说明:and\operatorname{and} 代表按位与。

    给定一个长度为 nn 的序列 xx 和一个初始位置 a=pa=p,每次操作可将 aa 移至任意位置,而第 jj 次操作花费为 wi,j+2×(L(xaandxi))w_{i,j}+2 \times (L-(x_a \operatorname{and} x_i))LL 为序列 xx 的最大值,目标是求出第 kk 次操作结束时,将 aa 转移到每个位置 ii 的最小总花费。

    考虑 dp 做法。定义 dpi,jdp_{i,j}jj 次操作后 aa 位于位置 ii 的最小总花费。因为在 jj 次操作时可以从任意位置 vv 移到 uu,所以令 wi,jw_{i,j} 为第 jj 次操作转移到 uu 的花费,推出动态转移方程:

    $ dp_{j,u}=\displaystyle\min_{1 \le i \le n} (dp_{j-1,v}+w_{u,j}+2 \times (L-x_v \operatorname{and} x_u)) $。

    但是时间复杂度为 O(n2×k)O(n^2 \times k),显然超时。

    观察到 0xi<2160 \le x_i < 2^{16},考虑位运算优化。将 xix_i 拆成高低 88 位。令 $high_i=(\lfloor\frac{x_i}{2^8} \rfloor) \operatorname{and} (2^8-1)$ 而 lowi=xiand(281)low_i=x_i \operatorname{and} (2^8-1)。根据按位与的性质,可将 dp 式子拆成高低 88 位的贡献,即

    $ dp_{j,u}=\displaystyle\min_{1 \le i \le n} (dp_{j-1,v}+w_{u,j}+2 \times L-2 \times (high_v \operatorname{and} high_u) \times 256-2 \times (low_v \operatorname{and} low_u)) $。

    最后再通过预处理最小值进一步优化即可。

    PP2242^{24},则时间复杂度:O(k×P)O(k \times P)。空间复杂度:O(n×k)O(n \times k)。可以通过。

    AC 记录代码

    • 1

    信息

    ID
    11050
    时间
    3000ms
    内存
    512MiB
    难度
    5
    标签
    递交数
    0
    已通过
    0
    上传者