RosettaCodeData/Task/Longest-increasing-subsequence/PascalABC.NET/longest-increasing-subseque...

31 lines
748 B
ObjectPascal

function lis(list: array of integer): sequence of array of integer;
begin
for var len := list.Count downto 1 do
begin
var res := new integer[len];
foreach var sub in (0..list.Count - 1).Combinations(len) do
begin
var temp := list[sub[0]];
for var ind := 1 to len - 1 do
if list[sub[ind]] > temp then
begin
temp := list[sub[ind]];
if ind = len - 1 then
begin
foreach var n in sub index i do
res[i] := (list[n]);
yield res;
end;
end
else break;
end;
end;
end;
begin
var a := |3, 2, 6, 4, 5, 1|;
lis(a).First.Println;
a := |0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15|;
lis(a).First.Println;
end.