最长不下降子序列问题

第一问$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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值