试题详情
简答题对于给定的一个序列(a1,a2,...aN),1≤N≤1000。我们可以得到一些递增上升的子序列(ai1,ai2,...aiK),这里1≤i1〈i2〈...iK≤N。比如,对于序列(1,7,3,5,9,4,8),有它的一些上升子序列,如(1,7),(3,4,8)等等。这些子序列中最长的长度是4,比如子序列(1,3,5,8)。你的任务:就是对于给定的序列,求出最长上升子序列的长度。要求写出你设计的算法思想及递推函数的公式表达。
  • 设f(i)表示:从左向右扫描过来直到以a[i]元素结尾的序列,获得的最长上升子序列的长度,且子序列包含a[i]元素(1≤i≤n)。

    即,f(i)是从f(1),f(2),……到f(i-1)中找最大的一个值,再加1。或者就是1。主要是看a[i]这个元素能否加入到之前已经获得的最长上升子序列,如果能加入,是之前已获得的最长上升子序列长度加一;如果不能加入,就取这最后一个元素作为一个单独子序列,长度为1。
    最后,所要求的整个序列的最长公共子序列长度为max{f(i):1<=i<=n}
  • 关注下方微信公众号,在线模考后查看

热门试题