1 条题解

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

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar lmh
    .

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

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

    以下是正文


    一个比官方题解更简单的做法。

    数据范围与 T1 不同,这里 n5000n\le 5000,所以 O(n2)O(n^2) 的时间复杂度是可以接受的。这启发我们设计一个二维的 dp 解决问题。

    m=2m=2 的情况是简单的:将偶数位取反(11 变成 2222 变成 11)之后相当于需要进行若干次操作使每一位都相同,此时唯一的最优策略是修改所有出现次数更少的数字,所以 [f(a,n,m)=i]g(a,n,m)=2(ni)\sum [f(a,n,m)=i]g(a,n,m)=2\binom{n}{i}

    否则,我们考虑任意一个最优策略,它在每个长度为 ll 的全部相等的连续段当中一定修改了 [l2][\frac{l}{2}] 个位置。

    00 表示没有进行修改,11 表示进行了修改操作,则 ll 为奇数时,唯一的可能是形如 010101000101010\cdots0

    ll 为偶数时,一定存在一个偶数位置作为分界点,前面形如 010101010101010\cdots1,后面形如 1010100101010\cdots0

    将它们分割成若干个 01011010,如果 ll 为奇数就把最后一个 00 单独拿出来。

    现在对这个分割状态进行 dp,令 fi,j,0/1/2f_{i,j,0/1/2} 为前 ii 个数进行了 jj 次修改,最后一个连续段形如 0/01/100/01/10 的方案数。

    这里定义一种“方案”为:在这 ii 个位置内填入 [1,m][1,m] 的数作为原来的 aa,再在放了 11 的位置上进行修改使得相邻位互不相同。

    初始令 f1,0,0=m,f2,0,0=f2,0,1=f2,0,2=m(m1)f_{1,0,0}=m,f_{2,0,0}=f_{2,0,1}=f_{2,0,2}=m(m-1)

    转移方程为:

    $$f_{i,j,0}=(f_{i-1,j,0}+f_{i-1,j,1}+f_{i-1,j,2})(m-1) $$$$f_{i,j,1}=(f_{i-2,j-1,0}+f_{i-2,j-1,1}+f_{i-2,j-1,2})(m-1)^2 $$

    每一位不能和前面一位相同,没有额外限制。

    $$f_{i,j,2}=(m-1)(m-2)f_{i-2,j-1,0}+(f_{i-2,j-1,1}+f_{i-2,j-1,2})(m-1)^2 $$

    注意这里从 fi2,j1,0f_{i-2,j-1,0} 转移时第 ii 位不能和第 i2i-2 位相同,因为这样会造出一个长度为奇数的连续段,它在 fi,j,0f_{i,j,0} 中被统计。

    之后就可以做到 O(n2)O(n^2) 了。可以用倍增 + FFT 做到 O(nlogn)O(n\log n) 但是我没写。

    • 1

    信息

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