首页 > 其他分享 >P2501 [HAOI2006] 数字序列

P2501 [HAOI2006] 数字序列

时间:2023-09-15 11:23:11浏览次数:53  
标签:50 frm P2501 HAOI2006 随机 LIS 序列 我们

原题

是思路非常值得学习的一道题


第一问:

首先我们感性上觉得这题应该和LIS有一点关系,但里面有一点问题:

17 50 50 50 18

如果我们求LIS的话,我们会认为只需要改掉50 50 50即可,但其实我们只改掉这些数,我们是无法做到让数单增的

我们发现这个限制写成数学语言即为:\(a_i - a_j \geq i - j\),移项得\(a_i - i \geq a_j - j\),因此我们令\(b_i = a_i - i\),只需求出\(b_i\)的最长不降子序列,拿\(n\)减掉即可


第二问:

这个数据随机我们很难办(我当时以为会用到随机排列的LIS期望长度是\(O(\sqrt{n})\)的限制想了半天,结果发现并不是这样),因此我们考虑暴力\(dp\)

首先容易想到对于我们所求的最长不降子序列里的两个数\(b_i, b_j\),我们可以确定在\([i,j]\)的所有数值域都不可能在\([b_i,b_j]\)之间(废话)

因此我们假设存在一个策略,其中黑线表示我们在操作完后序列的样子,红点表示操作前序列的样子,红色箭头表示变化值的大小(图来自题解)

image

我们发现对于一条黑线,如果在他上面的点比在他下面的点多,我们把他往上移到在他右边线处更优(如II移到III处更优);如果在他下面的点比在它上面的多同理;如果双方点相同,随便移动无影响。

image

因此我们在进行若干次操作后,得到的黑线一定是被分成了两部分:\([i,k]\)的值为\(b_i\),\([k+1,j]\)的值为\(b_j\),可以证明这么做一定是不劣的

因此我们考虑一个\(O(n^3)\)的暴力\(dp\):设\(g_i\)表示以\(i\)结尾的LIS的所有可能方案的最少操作次数。设\(S\)表示\(f_i\)的所有转移前驱构成集合。我们可以得到转移方程:

\[g_i = \min_{frm \in S}{( \min_{k=frm-1}^{i}{g_{frm}+\sum_{l=frm}^{k}{|a_l-a_{frm}|} + \sum_{l=k + 1}^{i}{|a_l-a_{i}|} } )} \]

因为数据随机,每个数被更新的前缀并不多,直接暴力转移即可

最终复杂度\(O(n^3)\)

u1s1,要是这题把随机性质去掉,数据范围开正常一点的话,是一个好题

标签:50,frm,P2501,HAOI2006,随机,LIS,序列,我们
From: https://www.cnblogs.com/fox-konata/p/17704539.html

相关文章

  • 为什么基于transformer的序列分类不用decoder模块?
    Transformer原本是为机器翻译设计的编码-解码(Encoder-Decoder)结构。在序列分类任务中,主要利用的是Transformer的Encoder模块来获取输入序列的特征表示,而不需要Decoder模块,主要有以下原因:解码模块主要用来生成目标序列,而分类任务只需要判别整个源序列的类别,不需要生成目......
  • php反序列化神奇构造
    来自[网鼎杯2020朱雀组]phpweb打开看看,我超,孙......
  • SQL注入和序列化的结合
    题目来自:[网鼎杯2018]Fakebook感觉原来学的有点局限,就只考虑到sql注入或者php反序列化啥的单方向,很少思考过结合起来的考法。话不多说,直接开解:登录要密码,join就是注册,估计直接注入注不出来,不然就不会给注册的选项了,那么我们就注册一个吧。这里注意一下blog的意思是给一个域......
  • 《Web安全基础》07. 反序列化漏洞
    @目录1:基本概念1.1:序列化&反序列化1.2:反序列化漏洞1.3:POP链2:PHP反序列化2.1:序列化&反序列化2.2:魔术方法3:JAVA反序列化3.1:序列化&反序列化3.2:反射机制3.3:相关资源本系列侧重方法论,各工具只是实现目标的载体。命令与工具只做简单介绍,其使用另见《安全工具录》。靶场参考:pi......
  • Java反序列化:CommonsCollections7调试分析
    CommonsCollections7基础知识1.HashTable散列表,也称为哈希表,以key-value形式进行访问的数据结构HashTable具有线程安全:多个线程同时访问它时,不会导致数据不一致。相对于HashMap、ConcurrentHashMap等线程安全性散列表,HashTable比较古老诸如散列表,常见的类方法:putget......
  • Java反序列化漏洞实现
    Java反序列化漏洞实现一、说明以前去面试被问反序列化的原理只是笼统地答在参数中注入一些代码当其反序列化时被执行,其实“一些代码”是什么代码“反序列化”时为什么就会被执行并不懂;反来在运营商做乙方经常会因为java反反序列化漏洞要升级commons.collections或给中间件打补丁......
  • AcWing 895. 最长上升子序列
    题目给定一个长度为$N$的数列,求数值严格单调递增的子序列的长度最长是多少。输入格式第一行包含整数$N$。第二行包含$N$个整数,表示完整序列。输出格式输出一个整数,表示最大长度。数据范围$1≤N≤1000,−10^9≤数列中的数≤10^9$输入样例:73121856输出样例:4......
  • 【230913-2】将1,2,3,4,5,6,7排成先减后增的序列,共有几种排法?
    【数学思路】初看这个问题,似乎抓不到头绪,但抓住1这个关键点后,问题便迎刃而解了。1这个数,在排列好的序列中,必然处于波谷位置,其左边的数呈递减趋势,右边的数呈递增趋势,都比1大。既然是波谷,1就不可能处于序列的首位或末位,只能在中间。至此,问题就变成了:从2,3,4,5,6,7中选择若干数排到1的左右......
  • PHP反序列化补档
    这次遇到了跟常规的反序列化不一样,但本质都是一样的。提了点难度的反序列化基本上都是加了一些特殊的机制或者过滤规则。先来看看题目吧:来自  [网鼎杯2020青龙组]AreUSerialz:打开就是源码:<?phpinclude("flag.php");highlight_file(__FILE__);classFileHandler{......
  • java序列化与反序列化
    理解Java序列化和反序列化serialization(序列化):将java对象以一连串的字节保存在磁盘文件中的过程,也可以说是保存java对象状态的过程。序列化可以将数据永久保存在磁盘上(通常保存在文件中)。deserialization(反序列化):将保存在磁盘文件中的java字节码重新转换成java对象称为反......