当前位置:   article > 正文

动态规划(最长公共子序列的长度)_动态规划法实现最长公共子序列输出长度

动态规划法实现最长公共子序列输出长度

给定两个数组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];
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

}
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;
}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/201877?site
推荐阅读
相关标签
  

闽ICP备14008679号