zoukankan      html  css  js  c++  java
  • 最长不下降子序列问题

    第一问$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$再求最大流即可。

  • 相关阅读:
    《一个人的村庄》 ——刘亮程
    uva 11020
    Codeforces Round #190 (Div. 2) B. Ciel and Flowers
    hdu3308 线段树——区间合并
    线段树,区间更新
    vim 被墙
    ubuntu12.04 修复Grub2
    windows下mysql数据库忘记密码
    高性能的异步爬虫
    中间件
  • 原文地址:https://www.cnblogs.com/ac-evil/p/10367309.html
Copyright © 2011-2022 走看看