题解:CF2061C Kevin and Puzzle

题意

\(n\) 个人,从左开始的第 \(i\) 个人说他左边有 \(a_{i}\) 个说谎者。但是有些人会说谎,所以他们的 \(a_{i}\) 不可信。说谎者不能相邻。求有多少种不同的情况。两种情况不同当且仅当有一个人在一种情况中说谎了而在另一种里没有。

题解

我们可以套路的设 \(dp_{i,0/1}\) 表示处理到了第 \(i\) 个人,这个人说谎或没说谎。第二维是 \(0\) 表示他说谎了,为 \(1\) 表示没有说谎。那么初始化就是 \(dp_{1,0} = 1,dp_{1,1} = [a_{1} = 0]\)。现在来考虑转移,分两种情况:

  • \(i\) 个人说谎了,那么上一个人必定不可能说谎,有 \(dp_{i,0} \leftarrow dp_{i - 1,1}\)
  • \(i\) 个人没说谎,那么又得分两种情况。
    • \(i - 1\) 个人说谎了。那么第 \(i - 2\) 个人肯定没有说慌,且 \(a_{i} - a_{i - 2}\) 一定为要为 \(1\),因为中间夹了一个说谎的。有 \(dp_{i,1} \leftarrow dp_{i - 1,0}\)
    • \(i - 1\) 个没说谎,那么一定要满足 \(a_{i} = a_{i - 1}\),因为他俩说的都是真话且他俩中间不会有说谎者。有 \(dp_{i,1} \leftarrow dp_{i - 1,1}\)

最终的答案就是 \(dp_{n,0} + dp_{n,1}\)

submission

posted @ 2025-01-21 10:44  伊埃斯  阅读(53)  评论(0)    收藏  举报