求LCS(最长公共子序列)的PASCAL实现

来源:百度知道 编辑:UC知道 时间:2024/05/15 18:51:38
求牛人给一个LCS 的pascal 标程&上网了找了半天全是C语言的 看不懂啊
在这里先谢谢了!

对不起先前给了最长公共子串的,你要的题目是这个吗Problem “已知艾尔里斯和弟弟艾尔里亚的基因基本相同,由于基因表达起来不方便,所以就用n个数字来表示。(因为至今共发现100000种基因,所以每个数字都<=100000)兄弟之间的基因个数是相同的,就是说他们都有n个数字。且对于每个人,这n个数字互不相同。现在要求兄弟之间基因的最长公共部分。可以不连续。”
Input 文件LCS.IN第1行,为n(1<=n<=100000) 下面2行,每行n个数字,表示了一个人的所有基因。
Output文件LCS.OUT一行,为他们两人基因的最长公共部分的长度。
Sample Input Sample Output
7 3
1 2 3 4 5 6 7
7 6 5 4 1 2 3
程序给你
var n,i,j:longint;
a,b,numa,numb:array[1..100000]of longint;

procedure qsrta(h,t:longint);
var i,j,k,x,y:longint;
begin
if h>=t then exit;
k:=random(t-h+1)+h;
x:=a[k];a[k]:=a[h];a[h]:=x;
y:=numa[k];numa[k]:=numa[h];numa[h]:=y;
i:=h;j:=t;
while i<j do begin
while (i<j) and (a[j]>x) do dec(j);
if i<j then begin a[i]:=a[j];numa[i]:=numa[j];inc(i);end;
while (i<j) and (a[i]<x) do inc(i);
if i<j then begin a[j]:=a[i];numa[j]:=numa[i];dec(j);end;