网络流24题之最长不下降子序列问题

Posted 342zhuyongqi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络流24题之最长不下降子序列问题相关的知识,希望对你有一定的参考价值。

P2766 最长不下降子序列问题

题目描述

?问题描述:

给定正整数序列x1,...,xn 。

(1)计算其最长不下降子序列的长度s。

(2)计算从给定的序列中最多可取出多少个长度为s的不下降子序列。

(3)如果允许在取出的序列中多次使用x1和xn,则从给定序列中最多可取出多少个长度为s的不下降子序列。

?编程任务:

设计有效算法完成(1)(2)(3)提出的计算任务。

n<=500

输入输出格式

输入格式:

第1 行有1个正整数n,表示给定序列的长度。接下来的1 行有n个正整数n:x1, ..., xn。

输出格式:

第1 行是最长不下降子序列的长度s。

第2行是可取出的长度为s 的不下降子序列个数。

第3行是允许在取出的序列中多次使用x1和xn时可取出的长度为s 的不下降子序列个数。

输入样例:

4

3 6 2 5

输出样例:

2

2

3

第一问可以n2DP,而nlogn不行,为什么?

因为在n2DP中f[i]表示以这个数为末尾前i个数最长不下降子序列的长度。

但是nlogn仅仅存储了前几个数,之后求出全局答案。

第2问和第3问就用到了这个东西。

还是那句话:建模真的很难

把一个点拆成2个点,编号为i和i+n正向连一条边权为1的边,反向连一条边权为0的边,可以反悔。之后建一个超级原点和超级汇点把f[i]=第一问的ans的点连一条边。

技术分享图片

之后跑网络流就行了。

第3问就是把1和原点,n和汇点边权设成inf再次跑网络流就行了。

以上是关于网络流24题之最长不下降子序列问题的主要内容,如果未能解决你的问题,请参考以下文章

LG2766 最长不下降子序列问题 网络最大流 网络流24题

「网络流24题」最长不下降子序列问题

网络流24题最长不下降子序列(最大流,动态规划)

洛谷2766:[网络流24题]最长不下降子序列问题——题解

P2766 [网络流24题]最长不下降子序列问题

最长不下降子序列问题 网络流24题