注意 \(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} \]然后这题就做完了,记得滚动数组、取模和初始化。
标签:子串,NOIP2015,中前,P2679,不取,个字符 From: https://www.cnblogs.com/landsol/p/17708383.html