最长公共子序列 | |
|
问题描述
有两个数字序列,序列X和序列Y,求这两个序列的最长公共子序列。
输入格式
输入
第一行,两个不超过500的整数,表示两个序列的长度。
接下来有两行,第一行有空格间隔的x个整数,表示序列x
第二行有空格间隔的y个整数,表示序列y (序列x,y中的整数大小不超过200)
输出格式
输出
输出文件第一行为一个非负整数,表示所求得的最长公共子序列长度
样例输入
7 6
15 10 7 10 3 15 10
10 3 7 15 10 15
样例输出
4
#include<bits/stdc++.h>
using namespace std;
int m,n,mm[502],nn[502],f[502][502],ans=-10e7;
int main(){
scanf("%d%d",&m,&n);
for(int i=1;i<=m;i++) scanf("%d",&mm[i]);
for(int j=1;j<=n;j++) scanf("%d",&nn[j]);
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++) {
if(mm[i]==nn[j]) f[i][j]=f[i-1][j-1]+1;
else f[i][j]=max(f[i][j-1],f[i-1][j]);
}
printf("%d",f[m][n]);
return 0;
}