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
}
posted @ 2023-12-14 23:55  ycllz  阅读(14)  评论(0)    收藏  举报