码迷,mamicode.com
首页 > 其他好文 > 详细

最长上升子序列模板

时间:2014-06-28 09:19:23      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:blog   2014      name   for   c   



//最长上升子序列(n^2)

//入口参数:1.数组名称 2.数组长度(从0开始)

int LIS(int a[],int len)
{
	int *dp=new int[len];
	int ans=1;
	dp[0]=1;
	for(int i=1;i<len;i++)
	{
		int m=0;
		for(int j=0;j<i;j++)
			if(dp[j]>m && a[j]<a[i])
				m=dp[j];
		dp[i]=m+1;
		ans=max(dp[i],ans);
	}
	return ans;
}

//最长上升子序列 nlogn

//入口参数:数组名+数组长度,类型不限,结构体类型可以通过重载运算符实现

//数组下标从1号开始。

int bsearch(int a[],int len,int num)
{
	int left=1,right=len;
	while(left<=right)
	{
		int mid=(left+right)/2;
		if(num<=a[mid])  //若最长不下降子序列,改<= 为 <
			right=mid-1;
		else
			left=mid+1;
	}
	return left;
}

int LIS(int a[],int len)
{
	int i,j,count=1;
	int *dp=new int[len+1];
	dp[1]=a[1];
	for(i=2;i<=len;i++)
	{
		if(a[i]>dp[count])	//若最长不下降子序列,改> 为 >=
			dp[++count]=a[i];
		else if(a[i]<=dp[1])    //若最长不下降子序列,改<= 为 <
			dp[1]=a[i];
		else
			dp[bsearch(dp,count,a[i])]=a[i];			
	}
	return count;
}


最长上升子序列模板,布布扣,bubuko.com

最长上升子序列模板

标签:blog   2014      name   for   c   

原文地址:http://blog.csdn.net/u012861385/article/details/35258699

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!