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,最长公共子串)的主要内容,如果未能解决你的问题,请参考以下文章

cf C. Eugene and an array

C. Ayoub and Lost Array cf dp

cf1562 C. Rings

cf 448 C. Painting Fence

CF #727(div2)C. Stable Groups,贪心,排序

CF 1033 C. Permutation Game