P2679 [NOIP2015 提高组] 子串

发布时间 2023-09-17 13:35:21作者: 御坂夏铃

注意 \(A\) 中取相同位置子串划分方式不同也算作不同的方案。

\(f_{i,j,l,0/1}\) 表示 \(A\) 中前 \(i\) 个字符,取出 \(l\) 个子串,拼成了 \(B\) 中前 \(j\) 个字符,第 \(i\) 个字符取/不取的方案数。

不取直接累加 \(A\) 中上一个字符的状态:

\[f_{i,j,l,0}=f_{i-1,j,l,0}+f_{i-1,j,l,1} \]

取就分接在上一个子串后面和新开一个子串两种情况讨论:

\[f_{i,j,1}=f_{i-1,j-1,l,1}+f_{i-1,j-1,l-1,0}+f_{i-1,j-1,l-1,1} \]

然后这题就做完了,记得滚动数组、取模和初始化。