首页 > 其他 > 详细

最长不下降子序列问题

时间:2019-02-12 22:41:02      阅读:183      评论:0      收藏:0      [点我收藏+]

第一问$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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!