CF 1303 E
显然O(n)划分之后可以用一个三维dp写
可以用bitset优化 也可以 化简为二维 dp i j 表示第i位 能搞到 a的j位 并且 搞到b位的 最大值
int dp[410][410];
bool check(string &s,string &pre,string &suf) {
memset(dp,-1,sizeof dp);
dp[0][0]=0;
for(int i=1;i<=s.size();i++){
for(int j=0;j<=pre.size();j++){
dp[i][j]=max(dp[i][j],dp[i-1][j]);
if(pre[j-1]==s[i-1]&&j>=1)dp[i][j]=max(dp[i][j],dp[i-1][j-1]);
int now=dp[i-1][j];
if(suf[now]==s[i-1])dp[i][j]=max(dp[i][j],now+1);
}
}
return dp[s.size()][pre.size()]==suf.size();
}
void solve(){
string s,t;cin>>s>>t;
for(int i=0;i<t.size();i++){
string pre=t.substr(0,i);
string suf=t.substr(i);
if(check(s,pre,suf)){
YES return;
}
}
NO
}