pku1631 Bridging signal 解题报告
发布于:2014-03-17 18:43:49 作者:兄弟网络
点击:次
题目描述:
给出S={1,2,…,n }到它自身的一个映射(一一对应),求出最长不下降子序列的长度,即LIS问题。
基本思想:
1. dp
设m[i]暗示映射到{1,2,...,i}的最长不下降序列的长度,则有
当 0<=j<=i-1, data[i]>data[j] 时, m[i] = max(m[j]) + 1;
算法复杂度O(n^2)
2. dp+二分搜索
D(i) = min { data[j] | m[j] = i }; 暗示长度为 i 的非降子序列的最后一个元素
这样D(i) 必然是一非递减序列,
软件开发,对于序列元素 data(i), 在D中查找最大的 j , 使得 D(j) <=data(i), 则以
data(i) 结尾的最长不下降子序列长度为 j+1,否则更新D中的数据。由于D非递减,所以可用二分查找法,
软件开发,故而
此算法效率为 O( nlogn )。此算法关键在于二分查找法.(此算法未考虑多对一的映射)