1. Yaroslav and Two Strings
白给题,令 \(f_{i,0/1,0/1}\) 表示前 \(i\) 位,有无小于,有无大于,根据每位的字符转移即可。
2. Towers
考虑设 \(f_i\) 表示前 \(i\) 个塔段数最多的划分,我们可以发现这个划分中最后一个数比其他划分都小,那么直接用 \(g_i\) 记录出最小值,然后可以直接 \(O(n)\) 转移,总共是 \(O(n^2)\) 的。
3. Two Strings
先正着倒着跑一遍匹配,对于 \(t\) 中的每个字符就可以搞出其最早/最晚在 \(s\) 中出现的位置,那么对于 \(s\) 中的 \(s_i\),只要存在一个 \(j\) 使得 \(t_j=s_i\) 并且 \(t_{j-1}最早的位置 \le i \le t_{j+1}最晚的位置\) 就可以了,换句话说,在这个范围内的字符 \(s_i\) 都是合法的,那么我们考虑可以对每个字符单独考虑,for t 的所有位置,然后区间减一,最后判有没有位置大于 \(0\) 就行了。
这是 dp?
4. Two out of Three
考虑到状态是后缀加上一个数,直接转移就行。