话说LCS有O(n*m)的算法,LIS也有O(n*m)的算法;
XX日,LIS被栈和二分优化了,复杂度变为了nlogn,
于是n排列的LCS也被优化了,也达到了nlogn.
nlogn的LCS:设有序列A,B。记序列A中各个元素在B 中的位置,用序列C存,求C的LIS即可。
LCS与LIS结合,于是有了LCIS,LCIS有n*m的算法。
代码如下:
for i:=1 to n do
begin
t:=0;
for j:=1 to n do
begin
if a[i]>b[j] then if f[j]>t thent:=f[j];
if a[i]=b[j] then if t+1>f[j] thenf[j]:=t+1;
if f[j]>ans then ans:=f[j];
end;
end;
有点抽象,但还是可以理解的。认真想想就明白了。