P1410 子序列——dp但是没想到

· · 个人记录

这一题不知道为啥卡了好久

初见思路

题目是要把序列划分成两个集合,每个集合内部满足 i<j \iff a_i<a_j

然后就转化成了两个集合中不存在逆序对

也就是说存在逆序对的两个点不能在一个集合内

于是转化成了图论问题

最开始用并查集,一个连通块内的点不能在一个集合里

结果这个结论是错的,只有直接连通的才不能在一个集合里,这个时候连通分量并没有原来的意义

然后不难想到二分图,但是那个背包真没看懂

dp

考虑描述一个子问题需要什么必要条件

首先根据题目要求,两个子序列的长度需要知道

其次因为要上升,需要记录最后一位保证合法性

以及阶段的一维

但是可以压一下:

于是真正能使用的状态就出现了

一个状态可以由两种决策转移过来: - $a_i$ 给了第一个子序列, $dp_{i,j}=dp_{i-1,j}$ $[a_i>a_{i-1}]

然后还有一个从 j=0 来的特判,因为 j=0 时并不会判断合法性,所以接上第二个子序列的时候要判定前方是否合法