-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlcs.pas
68 lines (57 loc) · 1.26 KB
/
lcs.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
{ Longest common subsequence }
Program LCS;
type
TMas = array [1 .. 100] of char;
var
mas1, mas2 : Tmas;
ilg1, ilg2, ats : Integer;
procedure nuskaitymas (var ilg1, ilg2 : integer; var mas1, mas2 : Tmas);
var
f : text;
ck : Integer;
begin
assign (f, 'lcs.in');
reset (f);
readln (f, ilg1, ilg2);
for ck := 1 to ilg1 do
read (f, mas1 [ck]);
readln (f);
for ck := 1 to ilg2 do
read (f, mas2 [ck]);
close (f)
end;
function max (sk1, sk2 : integer) : Integer;
begin
if sk1 > sk2 then max := sk1
else max := sk2
end;
function rask : integer;
var
mas : array [0 .. 100, 0 .. 100] of integer;
ckx, cky : Integer;
begin
for ckx := 1 to ilg1 do
mas [ckx, 0] := 0;
for cky := 1 to ilg2 do
mas [0, cky] := 0;
for cky := 1 to ilg2 do
for ckx := 1 to ilg1 do
if mas1 [ckx] = mas2 [cky]
then mas [ckx, cky] := mas [ckx - 1, cky - 1] + 1
else mas [ckx, cky] := max (mas [ckx - 1, cky], mas [ckx, cky - 1]);
rask := mas [ilg1, ilg2]
end;
procedure rasymas (ats : integer);
var
f : text;
begin
assign (f, 'lcs.out');
rewrite (f);
writeln (f, ats);
close (f)
end;
begin
nuskaitymas (ilg1, ilg2, mas1, mas2);
ats := rask;
rasymas (ats)
end.