标签:dp
题目大意:求最长上升子序列……
思路:看这数据规模,L<=100000,还一个点多组测试数据,O(
说一下该算法:令序列存于数组a中在O(
代码如下:
#include<iostream>
#include<cstdio>
using namespace std;
const int maxl=100005;
int l,a[maxl],c[maxl];
int find(int l,int r,int x)
{
int mid=(l+r)/2;
if (l==r)
return l;
if (c[mid]>x)
return find(l,mid,x);
else
return find(mid+1,r,x);
}
void work()
{
int len=0,j;
c[1]=-10000;
for (int i=1;i<=l;++i)
{
if (a[i]>c[len])
j=++len;
else j=find(1,len,a[i]);
c[j]=a[i];
}
printf("%d\n",len);
}
void init()
{
while (scanf("%d",&l)==1)
{
for (int i=1;i<=l;++i)
scanf("%d",&a[i]);
work();
}
}
int main()
{
init();
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:dp
原文地址:http://blog.csdn.net/little_flower_0/article/details/47678901