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;
}
CAD加油!欢迎跟我一起讨论学习算法,QQ:1401650042