赞
踩
给定两个数组X和Y,输出X和Y最长公共子序列的长度。
输入:
第一行输入测试数据组数;
每组测试数据包括两行,第一行代表数组X,第二行代表数组Y;其中每行的第一个数字代表数组长度。
输入样例:
1
4 1 3 4 5
6 1 2 3 4 5 6
输出样例:
4
代码:
#include<stdio.h>
int max(int i,int j)
{
if(i>=j) return i;
else return j;
}
int Mostsub(int* a,int* b,int l1,int l2)
{
int length[l1+1][l2+1];
for(int i=0;i<=l1;i++)
length[i][0] = 0;
for(int j=0;j<=l2;j++)
length[0][j] = 0;
for(int i=1;i<=l1;i++)
{
for(int j=1;j<=l2;j++)
{
if(a[i] == b[j]) length[i][j] = length[i-1][j-1]+1;
else length[i][j] = max(length[i-1][j],length[i][j-1]);
//printf("%d ",length[i][j]);
}
//printf("\n");
}
return length[l1][l2];
}
int main()
{
int n;
scanf("%d",&n);
while(n–)
{
int nn,mm;
scanf("%d",&nn);
int a[nn+1];
for(int i=1;i<=nn;i++)
scanf("%d",&a[i]);
scanf("%d",&mm);
int b[mm+1];
for(int i=1;i<=mm;i++)
scanf("%d",&b[i]);
int s = Mostsub(a,b,nn,mm);
printf("\n%d\n",s);
}
return 0;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。