专栏文章

Qoj2570. Maximal Subsequence

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mindiepv
此快照首次捕获于
2025/12/02 00:38
3 个月前
此快照最后确认于
2025/12/02 00:38
3 个月前
查看原文
Qoj2570. Maximal Subsequence

‌题目描述‌

给定一个包含 nn 个整数的数组 aa。序列的美观度定义为该序列的最长递增子序列的长度。要求找出数组 aa 的一个子序列,使得该子序列的美观度小于整个数组 aa 的美观度,并且该子序列的长度尽可能大。
转化题意,找出子序列等价于在原序列上删数,所以问题等价于删去最少的数,使新序列的LIS长度减小
首先,转化为最小割问题。设 fif_i 表示以 ii 结尾的LIS的长度。当fi=fj+1f_i=f_j+1j<ij<i 时,ii 可以放在LIS中,所以 jjii 连边。当 fi=l(LIS长度)f_i=l(LIS长度) 时,iiTT 连边,当 fi=1f_i=1 时,jjSS 连边。 考虑如何表示删点,将每个点拆开,变成 li,ril_i,r_i ,原来的建图变为 (rj,li,inf)(r_j,l_i,inf),两个点之间连1,即 (li,ri,1)(l_i,r_i,1)
最小割值等于最大流,所以我们就要求出这张图的 STS \to T 的最大流。这就是选择尽可能多的 STS \to T的路径。
考虑优化,有
结论1:设序列 aa 是一个LIS,序列 bb 是一个LIS,ri=min(ai,bi),ri=max(ai,bi)r_i= \min (a_i,b_i),r_i'=\max(a_i,b_i) ,则 ri,rir_i,r_i' 都是一个 LIS
如图,红色是一个LIS,黄色是一个LIS,绿色就是 rir_i,也是一个LIS,下面三个点就是 rir_i',也是 LIS。
所以,就可以设计算法: 每次只保留构成LIS的点。 每次我们就选绿色圈起来的部分,这一定是一条LIS,虽然在DP时我们的LIS会像橙色和紫色一样歪歪扭扭,但我们取绿色来算一定正确。注意每次删完绿色的点后原来保留下的点会不成立,也要删去。

评论

0 条评论,欢迎与作者交流。

正在加载评论...