Catching Cheaters

Catching Cheaters

其实就是把最长公共子序列的 dp 维护的值变为\(4LCS(C,D)-|C|-|D|\)的值就好了。

#include<bits/stdc++.h>

using namespace std;
const int maxn=5005;
int dp[maxn][maxn];

int main(){
    int n,m;cin>>n>>m;
    string s,t;cin>>s>>t;
    int ans=0;
    for(int i=1;i<=n;++i){
        for(int j=1;j<=m;++j){
            if(s[i-1]==t[j-1]) dp[i][j]=max(dp[i][j],dp[i-1][j-1]+2);
            else dp[i][j]=max(dp[i-1][j],dp[i][j-1])-1;
            dp[i][j]=max(0,dp[i][j]);
            ans=max(ans,dp[i][j]);
        }
    }
    cout<<ans<<endl;
    return 0;
}
posted @ 2020-11-19 18:33  caoanda  阅读(114)  评论(0编辑  收藏  举报