1 条题解

  • -1
    @ 2022-11-17 21:34:27

    50pt

    O(n3)O(n^3) 的动态规划,dp[i][j][0/1] 表示当前看到第 ii 个位置,已经选了 jj 个字母 A,上一个是字母 A/BA/B。转移的时候要枚举上一个位置 kk,然后将 kik \sim i 这一段全部弄成 A 或者 B。所以 dpdpn3n^3 的。

    100pt

    首先对三条规则进行简单分析

    1. 对于规则 3 来说,假设 c=3c=3,那么如果想要通过 AB 切换来获得价值,那字符串就应该形如 BBBABBBABBBA 这样,即每 3 个 B 就切换成 A。
    2. 对于规则 1.2 来说,把字母放在连续的一段地方,第一次产生价值需要 a+1a+1 个 A 或者 b+1b+1 个 B,第二次及以后产生价值只需要 aa 个 A 或者 bb 个 B

    我们可以枚举 A 和 B 切换了多少次,假定我们切换的方式就是 BBBABBBABBBA,即每一段 A 的长度都为 1,我们又知道 AB 的切换次数,就可以知道现在已经用掉了几个 A,然后我们先考虑把 A 全部用完。

    1. 在 BBBABBBA 的形式前面 只需要花费一个 A 就可以拿到一个价值
    2. 然后将多余的 A 填充进字符串中,因为每一段 A 的长度都是 1,所以此时本质上是每多 aa 个 A,答案 +1。

    然后再考虑将剩余的 B 用完。

    1. 如果倒数第二个位置是 A 的话,那么最后一个只需要花费一个 B 就能拿到一个价值
    2. 例如 b=4,c=3b=4,c=3,本来我们填充的是 BBBABBBABBBA,根据规则 2,当一段 B 的长度达到 5 的时候又可以使得价值 +1,所以我们尽量将每一段 B 都填充到长度为 5。如果全部填充好了且还有多余的 B,那么每多 bb 个 B,答案 +1。
    • 1

    信息

    ID
    1661
    时间
    1000ms
    内存
    512MiB
    难度
    10
    标签
    (无)
    递交数
    9
    已通过
    1
    上传者