计算机科学
首页
学历类考试
大学
计算机科学
简答题
对于给定的一个序列(a
1
,a
2
,...a
N
),1≤N≤1000。我们可以得到一些递增上升的子序列(a
i1
,a
i2
,...a
iK
),这里1≤i
1
〈i
2
〈...i
K
≤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}
答案解析
略
分享
语音搜题
拍照搜题
打赏