cf1506 C. Double-ended Strings(DP,最长公共子串)
Posted 为什么他们cf写的这么快
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cf1506 C. Double-ended Strings(DP,最长公共子串)相关的知识,希望对你有一定的参考价值。
添加链接描述
题意:给定两个字符串s1和s2,每次可以对两个字符串删除首字母或者末字母,求最少删除几个能使得s1和s2相等。
思路:答案显然为len(s1)+len(s2)-max(LIS),有点水,算是复习一下求最长公共子串。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e3+5;
int T,dp[maxn][maxn];
int main()
{
scanf("%d",&T);
while(T--)
{
string str1,str2;
int ans=0;
cin>>str1>>str2;
memset(dp,0,sizeof(dp));
for(int i=0;i<str1.size();++i)
for(int j=0;j<str2.size();++j)
if(str1[i]==str2[j])
{
if(i==0||j==0) dp[i][j]=1;
else dp[i][j]=dp[i-1][j-1]+1;
}
for(int i=0;i<str1.size();++i) for(int j=0;j<str2.size();++j) ans=max(ans,dp[i][j]);
printf("%d\\n",str1.size()+str2.size()-2*ans);
}
}
以上是关于cf1506 C. Double-ended Strings(DP,最长公共子串)的主要内容,如果未能解决你的问题,请参考以下文章