int p[maxn],used[maxn],vis[maxn],d[maxn],path[maxn];
int solve()//记录路径的LIS模板
{
int len=0;
for(int i=1;i<=n;i++){
int it=lower_bound(d,d+len,p[i])-d;
if(it==len){
d[len++]=p[i];
path[i]=len;
}
else{
d[it]=p[i];
path[i]=it+1;
}
}
for(int t=0;t<=n;t++){
used[t]=0;
}
// fill(used,used+maxn,0);
int tmp=len;
for(int i=n;i>0;i--){
if(path[i]==tmp){
used[p[i]]=1;
tmp--;
}
}
return len;
}
记录路径的LIS模板
最新推荐文章于 2022-03-10 23:02:50 发布
本文介绍了一种基于最长递增子序列(LIS)的算法实现,通过使用动态规划思想来寻找序列中的最长递增子序列。算法首先初始化数据结构,然后遍历输入序列,利用lower_bound函数找到当前元素在已构建的递增序列中的位置,以此更新最长递增子序列。最后,通过回溯路径记录并标记最长递增子序列中的元素。

600

被折叠的 条评论
为什么被折叠?



