将内层 DP 的结果作为外层 DP 的状态进行 DP。
P10614 BZOJ3864 Hero meet devil
考虑 LCS 的转移,\(g_{i,j}=g_{i-1,j-1}+1[s_i=t_j]\) 或 \(g_{i,j}=\max(g_{i-1,j},g_{i,j-1})[s_i\ne t_j]\)。
一个朴素的想法是,设 \(f_{i,s}\) 表示 \(T\) 的前 \(i\) 位,与 \(S\) 的 LCS 数组为 \(s\) 的方案数,转移即考虑下一位填什么。
可以进一步优化,因为 \(g_i\) 可以通过上一行生成,于是只需记最后一行的 LCS 数组。
固定 \(i\),对 \(g_i\) 差分,发现只能是 \(0/1\),于是直接状压差分数组。时间复杂度 \(\mathcal{O}(m2^{|S|})\)。
P4590 [TJOI2018] 游园会
跟上题差不多,同步记录是否出现了 \(\mathtt{N}\),\(\mathtt{NO}\) 后缀即可。
标签:游园会,LCS,一行,数组,mathtt,DP From: https://www.cnblogs.com/xishanmeigao/p/18415393