给定一个序列
       a1, a2, a3, ...., aN
找出其中的递增的最长子序列


基本思想:DP的方法,对数字 ai 来说,假设前(1,2,....,i-1)个数字中的最长子序列长度为m,如果 ai 比这个子序列中的最大的一个数大,则 ai 加入到这个最长子序列,否则 goto a(i+1),代码如下

 1# include <iostream>
 2# include <vector>
 3# include <algorithm>
 4int main() {
 5
 6    int length = 8;
 7    int number[] = {1,-1,2,-3,4,-5,6,-7};
 8    
 9    std::vector<int> Lis(length);
10
11    for (int i = 0; i < length; i++{
12        Lis[i] = 1;
13        for (int j = 0; j < i; j++{
14            if (number[j] < number[i] && Lis[j] + 1 > Lis[i]) {
15                Lis[i] = Lis[j] + 1;
16            }

17        }

18    }

19    
20    std::cout<<*max_element(Lis.begin(), Lis.end())<<std::endl;
21
22    return 0;
23}
Posted on 2009-06-18 17:13 Liu 阅读(450) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理