算法小问题,1小时之内,求救!

来源:百度知道 编辑:UC知道 时间:2024/05/17 09:12:48
从数组中抽取一个由小到大的子数列,抽出的子数列的顺序和在原来数组的顺序一样,问能抽出的最长子数列。
例如3 1 3 7 4 1 5
中最长的序列是:1 3 4 5
给点思路就好!!!谢谢

最长递增子序列....很古老的题目了..
DP
F[i]表示以i结尾的最长的子序列
F[i]:=max{f[j]+1 (j<i且a[j]<a[i])}a是输入的数列.

这个好像是最长公共子序列问题
动态规划的一个计算最长公共子序列的方法如下:
以两个序列 X、Y 为例子:
设有二维数组 f[j] 表示 X 的 i 位和 Y 的 j 位之前的最长公共子序列的长度,则有:
f[1][1] = same(1,1)
f[j] = max{f[i-1][j − 1] + same(i,j),f[i-1][j],f[j − 1]}
其中,same(a,b)当 X 的第 a 位与 Y 的第 b 位完全相同时为“1”,否则为“0”。
此时,f[j]中最大的数便是 X 和 Y 的最长公共子序列的长度,依据该数组回溯,便可找出最长公共子序列。

这个很简单,你把这个数组循环一下,把重复的排除掉,再排一下序就可以了。

先将数组中重复的剔除掉,然后组成个新数组~然后把新的数组按大小进行排序~就OK了