20 lines
434 B
Text
20 lines
434 B
Text
lis_cp(S, Res,Z) =>
|
|
Len = S.len,
|
|
X = new_list(Len),
|
|
X :: 0..1,
|
|
|
|
increasing_except_0($[X[I]*S[I] : I in 1..Len]),
|
|
Z #= sum(X),
|
|
|
|
solve($[max(Z)],X),
|
|
% Extract the found LIS
|
|
Res = [S[I] : I in 1..Len, X[I] == 1].
|
|
|
|
%
|
|
% Ensures that array A is (strictly) increasing if we disregard any 0's
|
|
%
|
|
increasing_except_0(A) =>
|
|
N = A.len,
|
|
foreach(I in 1..N, J in I+1..N)
|
|
(A[I] #!= 0 #/\ A[J] #!= 0) #=> (A[I] #< A[J])
|
|
end.
|