DP与L?S

话说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;

有点抽象,但还是可以理解的。认真想想就明白了。

你可能感兴趣的:(DP与L?S)