最长递增子序列,经典问题,有别于最长子序列问题,元素必须递增。
cse531 mid2的时候考过的问题,要求n^2, 某人做了个半对还沾沾自喜.........弱爆了。
这里给出nlogn的解法,《挑战程序竞赛》书中实例代码相当简洁优雅,三行搞定。
以下po c++ 代码。
//
// 065_lasc.cpp
// changlle
//
// Created by user on 12/29/15.
// Copyright (c) 2015 user. All rights reserved.
//
#include <iostream>
#include <algorithm>
using namespace std;
int n=5;
int a[5]={4,2,3,1,5};
int main () {
int dp[5];
fill(dp, dp+n,100);
for (int i=0; i<n;i++)
*lower_bound(dp,dp+n,a[i])=a[i];
cout<<lower_bound(dp,dp+n,100)-dp<<endl;
return 0;
}