最长公共子序列

最长公共子序列

![请添加图片描述]( https://img-blog.csdnimg.cn/ca2a84c026e34b73a78045b94d728e13.png?x-oss-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAQ-qvrW_qr61k6q-tZeqvrWnqr61u6q-tRw==,size_19,color_FFFFFF,t_70,g_se,x_16)

输入样例:

4 5
acbd
abedc

输出样例:

3

代码模板:

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;

const int N = 1010;

int n,m;
char a[N],b[N];
int f[N][N];


int main(){
	scanf("%d %d",&n,&m);
	scanf("%s%s",a+1,b+1);
	
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
		{
		    //所有再第一个序列得前i个字母中出现,且再第二个序列得前j个字母出现的的子序列
			f[i][j]=max(f[i-1][j],f[i][j-1]);
			if(a[i]==b[j]) f[i][j]=max(f[i][j],f[i-1][j-1]+1);
		}
		
		cout<<f[n][m]<<endl;
		
		return 0;
}

 

posted @ 2022-03-22 01:24  panse·  阅读(34)  评论(0)    收藏  举报