1 solutions

  • 0
    @ 2025-2-21 10:06:11

    本题考察线性dp,考虑一个递推做法

    dp[i][0]dp[i][0] 表示 前 ii 个字符,不管如何改变*, 可能产生的 S的个数

    dp[i][1]dp[i][1] 表示 前 ii 个字符,不管如何改变*, 可能产生的 SO的个数

    dp[i][2]dp[i][2] 表示 前 ii 个字符,不管如何改变*, 可能产生的 SOS的个数

    那么考虑当前位置ii*

    对于转移,这个位置可以是O 也可以是 S, 那么

    $dp[i][0] = (dp[i - 1][0] \times 2 \% mod + 2^{前面*号的个数}) \% mod;$ 因为如果变成 S, 那么前面可以通过改变*对答案的贡献就是 2前面号的个数2^{前面*号的个数}

    $dp[i][1] = (dp[i - 1][1] \times 2 \% mod + dp[i - 1][0]) \% mod;$

    $dp[i][2] = (dp[i - 1][2] \times 2 \% mod + dp[i - 1][1]) \% mod;$

    那么考虑当前位置iiS 或者 O 时的转移留给同学们思考。

    • 1

    Information

    ID
    631
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    10
    Tags
    (None)
    # Submissions
    13
    Accepted
    1
    Uploaded By