ha~ «问题描述: 给定正整数序列$x_1,...,x_n$ .$n<=500$ 求(1)计算其最长不下降子序列的长度$s$. (2)计算从给定的序列中最多可取出多少个长度为$s$的不下降子序列. (3)如果允许在取出的序列中多次使用$x_1$和$x_n$,则从给定序列中最多可取出多少个长度为$s$的不下降子序列. (1)暴力n方解决 (2)建分层图,把图每个顶点i按照F[i]的不同分为若干层,这样图中从S出发到T的任何一条路径都是一个满足条件的最长不下降子序列.由 S 向所有$ f_i =…
[网络流24题] 最长递增子序列 ★★★☆ 输入文件:alis.in 输出文件:alis.out 简单对比 时间限制:1 s 内存限制:128 MB «问题描述: 给定正整数序列x1,-, xn. (1)计算其最长递增子序列的长度s. (2)计算从给定的序列中最多可取出多少个长度为s的递增子序列. (3)如果允许在取出的序列中多次使用x1和xn,则从给定序列中最多可取出多少个长 度为s的递增子序列. 注意:这里的最长递增子序列即最长不下降子序列!!! «编程任务: 设计有效算法完成(1)(2)(…
743. [网络流24题] 最长k可重区间集 ★★★   输入文件:interv.in   输出文件:interv.out   简单对比时间限制:1 s   内存限制:128 MB «问题描述: «编程任务: 对于给定的开区间集合I和正整数k,计算开区间集合I的最长k可重区间集的长度. «数据输入: 由文件interv.in提供输入数据.文件的第1 行有2 个正整数n和k,分别表示开区间的 个数和开区间的可重迭数.接下来的n行,每行有2个整数,表示开区间的左右端点坐标. «结果输出: 程序运行结…
最长 \(k\) 可重区间集 题目大意 给定实心直线 \(L\) 上 \(n\) 个开区间组成的集合 \(I\) ,和一个正整数 \(k\) ,试设计一个算法,从开区间集合 \(I\) 中选取开区间集合 \(S \subseteq I\) ,使得在实直线 \(L\) 上的任意一点 \(x\) , \(S\) 中包含 \(x\) 的开区间个数不超过 \(k\) ,且 \(\sum_{z\in S}|Z|\) 达到最大( \(|Z|\) 表示开区间 \(z\) 的长度). 这样的集合 \(S\) 称…
题目链接:戳我 当时刷24题的时候偷了懒,没有写完,结果落下这道题没有写qwq结果今天考试T3中就有一部分要用到这个思想,蒟蒻我硬是没有想到网络流呜呜呜 最大费用流. 就是我们考虑将问题转化一下,转化成从出发点开始往后走K次,每次可以走一个区间.因为题目中没有给坐标轴的大小,所以为了防止过大,我们离散化一下坐标.之后就是为每个区间添加一个费用为区间长度的,容量为1的边.(因为每个区间只能经过一次).(为什么可以要用到网络流呢,因为网络流有一个很好的特性就是可以退流啊!我们如果选择不走这个区间的话…
给定正整数序列x1,..., xn (n<=500).(1)计算其最长递增子序列的长度s.(2)计算从给定的序列中最多可取出多少个长度为s的递增子序列.(3)如果允许在取出的序列中多次使用x1和xn,则从给定序列中最多可取出多少个长度为s的递增子序列. 这题求的其实是最长非递减子序列.. 第一问,是个经典的DP,dp[i]表示序列x1...xi且以xi结尾的LIS. 第二问,这么建容量网络: x1...xn中每个i,拆作两点i和i',连<i,i'>容量1的边 源点和所有dp[i]==1的…
最长k可重线段集问题 时空限制1000ms / 128MB 题目描述 给定平面 x−O−y 上 n 个开线段组成的集合 I,和一个正整数 k .试设计一个算法,从开线段集合 I 中选取出开线段集合 S⊆I ,使得在 x 轴上的任何一点 p,S 中与直线 x=p 相交的开线段个数不超过 k,且∑​∣z∣达到最大.这样的集合 S 称为开线段集合 I 的最长 k 可重线段集.∑​∣z∣ 称为最长 k 可重线段集的长度. 对于任何开线段 z,设其断点坐标为 (x0​,y0​) 和 (x1​,y1​),则…
洛谷传送门 LOJ传送门 很巧妙的建图啊...刚了$1h$也没想出来,最后看的题解 发现这道题并不类似于我们平时做的网络流题,它是在序列上的,且很难建出来二分图的形. 那就让它在序列上待着吧= = 对于一个区间,左端点向右端点连边,流量为$1$,费用为区间长度 对于一个位置$i$,向$i+1$连边,流量为$K$,费用为$0$ 为什么要这么建图呢? 假设有$1$流量流到了位置$i$,有两种情况 1.选择一个从i开始的区间$[i,r]$,这点流量流到了$r$位置.而在$(i,r)$内,这点流量不能用…
最长 \(k\) 可重线段集 题目大意 给定平面 \(x-O-y\) 上 \(n\) 个开线段组成的集合 \(I\) ,和一个正整数 \(k\) .试设计一个算法,从开线段集合 \(I\) 中选取开线段集合 \(S \subseteq I\) ,使得在 \(x\) 轴上的任意一点 \(P\) , \(S\) 中与直线 \(x=p\) 相交的开线段个数不超过 \(k\) ,且 \(\sum_{z \in S}|z|\) 最大.这样的集合 \(S\) 称为开线段集合 \(I\) 的最长 \(k\)…
https://www.luogu.org/problemnew/show/3358 以区间(1,5),(2,6),(7,8)为例 建模方法一: 建模方法二: 离散化区间端点 相当于找k条费用最大的不相交路径 #include<queue> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define N…