笔记——最长上升子序列
2017-08-19 09:41
411 查看
int bSearch(int num,int k)//返回可更新的位置,如 1 3 4 ,2->1 2 4 将k长度的上升子序列的尾巴更新到最小
{
int low=1,high=k;
while(low<=high)
{
int mid=(low+high)/2;
if(num>=p[mid])
low=mid+1;
else
high=mid-1;
}
return low;
}
int LIS(int n)
{
int low=1,high=n;
int k=1;
for(int i=2;i<=n;++i)
{
if(p[i]>p[k])//若p[i]>p[k],上升子序列长度加1,p[i]变成尾巴
p[++k]=p[i];
else//若不是,则更新某一长度的尾巴
{
int pos=bSearch(p[i],k);
p[pos]=p[i];
}
}
return k;
}
{
int low=1,high=k;
while(low<=high)
{
int mid=(low+high)/2;
if(num>=p[mid])
low=mid+1;
else
high=mid-1;
}
return low;
}
int LIS(int n)
{
int low=1,high=n;
int k=1;
for(int i=2;i<=n;++i)
{
if(p[i]>p[k])//若p[i]>p[k],上升子序列长度加1,p[i]变成尾巴
p[++k]=p[i];
else//若不是,则更新某一长度的尾巴
{
int pos=bSearch(p[i],k);
p[pos]=p[i];
}
}
return k;
}
相关文章推荐
- [POJ2774]Long Long Message [CodeVS3160]最长公共子串 做题笔记
- 算法练习笔记(十六)—— 最长的子串
- 【北大夏令营笔记-动态规划】百练2757-最长上升子序列
- 最长上升子序列
- 最长上升子序列
- 最长上升子序列
- LIS-最长上升子序列
- 0012算法笔记——【动态规划】最长公共子串问题
- 动态规划练习01:最长上升子序列
- 最长上升子序列
- 最长上升子序列
- LintCode(M)最长上升子序列
- 动态规划——最长上升子序列
- 最长上升子序列
- 解题笔记(34)——求最长单调递减子序列
- 最少拦截系统-贪心或最长上升子序列
- 最长上升子序列
- 九度笔记之 1337:寻找最长合法括号序列
- 最长上升子序列
- poj2533:最长上升子序列