Newcoder 109 B.好位置(dp)
Description
給出兩個串 和
定義 中的某一位 為好的位置,當且僅當存在 的子序列 滿足 且存在 使得 成立。
問 中是否所有的位置都是好的位置。
Input
一行兩個字串 ,這兩個串均由小寫字母構成。
Output
表示是。 表示不是。
Sample Input
abab
ab
Sample Output
Yes
Solution
設 ,對於 的每個位置 ,定義 分別為 和 與 的最長公共子序列個數,其中 需要保證以 結尾,如此只要 則 位置合法,下面考慮求
首先求 ,令 ,若 ,則顯然有轉移 ,否則需要在 中找到最大的位置 使得 ,這樣的話 最多可以匹配 ,而 可以匹配 ,進而 就可以匹配 ,故 ,直接找 時間複雜度 ,注意到對於同樣的字母 ,其對應的 是不減的,故可以通過維護 中每種字元的位置,用遊標法優化該轉移,如此時間複雜度為
而對於 ,只需把 兩個串均反轉,即變成不要求 結尾的上一問題,按同樣的方法求出 後,令KaTeX parse error: Expected group after '_' at position 10: R[i]=\max_̲\limits{i\le j\…即可
Code
#include<cstdio>
#include<cstring>
#include<algorithm>
#inclu