题解:AT_xmascon21_c Count Me
看了下大佬们的题解,我不觉得这个把
本题还有一个思考方向:保留
直接考虑题目中的过程,为了不算重,考虑加一个限制:每次删掉的数要满足
首先我们考虑一个基本的问题:对于一个长度为
考虑枚举我们现在删掉了哪个位置,设为
我们此时需要确定
这一步相当于说,我们翻开了相邻的两个位置,并且删除了左边那个数。这里可以利用
特别的,如果
得到递推式
接下来考虑有一些位置是
手玩以下有边界条件
枚举我们现在删掉了哪个位置。不同于之前的是,我们事先知道了一些位置上的值为
- 如果
p=n 或s_ps_{p+1}=\texttt{??} ,分析同上,f_{n-1,l}\to f_{n,l} 贡献n-l 次。 - 如果
s_p s_{p+1} = \texttt{?0} ,则这个问号下只能是\texttt{1} ,f_{n-1,l}\to f_{n,l} 。 - 如果
s_p s_{p+1} = \texttt{0?} ,则问号下的数是\texttt{1} ,可以用\texttt{1}=\texttt{?}-\texttt{0} 容斥掉,f_{n-1,l-1}-f_{n-1,l} \to f_{n,l} 。
整理一下,
归纳可得,如果存在多段连续的
我们现在将原字符串中的
- 如果
s_i=\texttt{0} ,则dp_{i,l-1}\times \frac 1 {l+1}\to dp_{i+1,l} 。 - 如果
s_i=\texttt{?} ,则dp_{i,l}\to dp_{i+1,0} 。 - 如果
s_i=\texttt{1} ,则dp_{i,l-1}\times \frac {-1} {l+1}\to dp_{i+1,l} ,dp_{i,l}\to dp_{i+1,0} 。
事实上状态数少的可怜,在模拟赛里能骗 80pts。(骄傲)
会了
我们得先把这个 dp 式子压成一维的,枚举上一个被钦定为问号的位置