一般情况:
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
int a[1005],dp[1005],n;
int LIS()
{
int i,j,ans,m;
dp[1] = 1;
ans = 1;
for(i = 2;i<=n;i++)
{
m = 0;
for(j = 1;j<i;j++)
{
if(dp[j]>m && a[j]<a[i])
m = dp[j];
}
dp[i] = m+1;
if(dp[i]>ans)
ans = dp[i];
}
return ans;
}
二分法优化:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int n,p[1005],d[1005];
int LSC()
{
int l,sta,end,mid;
p[1]=d[1];
l=1;
for(i=2;i<=n;i++)
{
sta=1;
end=l+1;
while(sta<end)
{
mid=(sta+end)/2;
if(d[i]<=p[mid])
end=mid;
else
sta=mid+1;
}
p[end]=d[i];
if(end==l+1)
l++;
}
return l;
}