/*设当前已经求出的最长上升子序列长度为len。先判断s[i]与a[len]。若a[len]<=s[i],则将s[i]接在a[len]后将得到一个更长的上升子序列,len = len + 1,a[len]=s[i];否则,在a[1]..a[len]中,找到最大的j,满足a[j] <= s[i]。令k = j + 1,则有a[j] <= s[i] <= a[k],将s[i]接在a[j]后将得到一个更长的上升子序列,同时更新a[k] =s[i]。最后,len即为所要求的最长上升子序列的长度。a[]在算法结束后记录的并不是一个符合题意的最长上升子序列它只是存储的对应长度LIS的最小末尾。有了这个末尾,我们就可以一个一个地插入数据。*/
Powered by: C++博客 Copyright © Initiate