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

  • 相关阅读:
    Jquery所有获取对象
    使用VS Code 调试Vue
    Http请求
    Xml,Json序列化
    SqlServer函数使用
    FastReport关闭打印提示框
    求面试经验
    pyspark基于python虚拟环境运行
    idea配置本地spark本地开发环境
    carbondata使用总结
  • 原文地址:https://www.cnblogs.com/ac-evil/p/10367309.html
Copyright © 2011-2022 走看看