最长不下降子序列问题

第一问$LIS$求出$s$。(用正常的$O(n^2)$的算法,后面有用)

第二问首先动态规划求出$f_i$,然后根据题意 “最多可取出多少个长度为s的不下降子序列”说明子序列的起点一定在$i$当且仅当$f_i=s$,终点在$j$当且仅当$f_j=1$。

又因为这是网络流24题每个数只能被选一次,

所以把每个数对应到点上,点要拆开为$<i,a>$和$<i,b>$,且$<i,a>$要向$<i,b>$连一条容量为$1$的边,这样能够保证这个点只被流过一次即覆盖一次,就能保证这个数只被选一次。

对于所有的$x_i leq x_j$且$f_i=f_j+1$,$i<j$,连边$<i,b>$到$<j,a>$,容量为$1$。

然后设立超级源$<s>$和超级汇$<t>$,将$<s>$向所有$f_i=s$的点$<i,a>$连边,容量为$1$,将所有$f_j=1$的点$<j,b>$向$<t>$连边,容量为$1$。

求一遍$<s>$到$<t>$的最大流即可。

第三问就是如果有$<s>$到$<1,a>$的连边、$<n,b>$到$<t>$的连边,将他们的容量改为$INF$再求最大流即可。

原文地址:https://www.cnblogs.com/ac-evil/p/10367309.html