首页 > 其他分享 >P6631 [ZJOI2020] 序列

P6631 [ZJOI2020] 序列

时间:2023-09-17 09:55:05浏览次数:43  
标签:需要 覆盖 P6631 线段 序列 连续 ZJOI2020 gets 间隔

可以将问题用形象地方式来表述。给定一排点,第 \(i\) 个点有它需要的覆盖次数 \(a_i\)。有两种线段,一种能覆盖连续的一些点,称其为连续线段;另一种能覆盖相邻间隔为 \(1\) 的一些点,称其为间隔线段。现在要用尽可能少的线段覆盖所有点 \(i\) 恰好 \(a_i\) 次。

发现如果没有间隔线段就是被某组织出烂的原题。显然,每次取最长的非 \(0\) 段最优。

回到本题,首先可以证明一个结论:假设 \(a_1\sim a_i>0\),\(a_{i+1}=0\) 且 \(i>1\),选一条从 \(1\sim i\) 的连续线段一定不劣。因为选择间隔线段虽然可以延伸到 \(i+2\) 但需要两条,而选连续线段完全可以加一条 \(i+2\) 开头的,还能自行选择类型。

接着需要怎么做呢?唯一需要考虑的就是前面有线段连过来。在处理点 \(i\) 时,记连过来的连续线段数量为 \(x\),能覆盖到点 \(i\) 的间隔线段数量为 \(y\),不能覆盖到点 \(i\) 的间隔线段数量为 \(z\)。

先处理一下特殊情况:连过来的线段太多了,即 \(x+y>a_i\),有 \(k\gets x+y-a_i\) 条线段不能向后继续延伸。但我们会发现留下间隔线段还是连续线段是根据后面的情况决定的,所以不妨将 \(x\gets x-k\),\(y\gets y-k\),标记置为 \(k\),表示可以免费连向后面的线段数量(种类任选)。但这样可能会出现一种情况,\(x<k\) 或 \(y<k\),此时标记就不合法了。对于这种情况,我们将较少的那种线段数量置为 \(0\),较多的线段数量对应减少,即可保证合法。

然后就好办了,根据之前的结论处理 \(a_{i-1}\) 与 \(a_i\)。能用连续线段就用,如果 \(i-1\) 还有剩下就用间隔线段。

当然还要一些需要注意的细节:

  • 如果更新了标记,最后需要将 \(a_i\) 置为 \(k\),答案减去 \(k\),同时清空标记。这样就实现了免费连。
  • 从 \(i=2\) 开始做。
  • 最后多做一次。

好像不能叫反悔贪心,因为只是暂时不做。

标签:需要,覆盖,P6631,线段,序列,连续,ZJOI2020,gets,间隔
From: https://www.cnblogs.com/landsol/p/17707862.html

相关文章

  • 消息转换器 替代 @JsonFormat注解 完成 日期类序列化时的格式转换
      spring中的日期类从数据库读取完数据后,默认的格式其实很难看,传输给前端也不友好,所以我们一般会将日期类通过类似@JsonFormat(pattern="yyyy-MM-ddHH:mm:ss")privateLocalDateTimecreateTime;来更改日期类序列化时的格式。但这样太麻烦了,我们还可以用SpringMVC框架的......
  • 关于pta上6-2 两个有序链表序列的合并
    这是在dev上的源代码,C语言#include<stdio.h>#include<stdlib.h>typedefintElementType;typedefstructNode*PtrToNode;structNode{ElementTypeData;PtrToNodeNext;};typedefPtrToNodeList;ListRead();/*细节在此不表*/voidPrint(List......
  • 46-字典-序列解包用于列表元组字典
          ......
  • 代码随想录算法训练营-回溯算法|455. 分发饼干、376. 摆动序列
    1.贪心算法一般分为如下四步:将问题分解为若干个子问题找出适合的贪心策略求解每一个子问题的最优解将局部最优解堆叠成全局最优解 455. 分发饼干1.局部最优就是大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个,全局最优就是喂饱尽可能多的小孩。时间复杂度:O(nlogn)空间......
  • m基于uw导频序列和cordic算法的基带数据帧频偏估计和补偿FPGA实现,包含testbench
    1.算法仿真效果本系统进行了Vivado2019.2平台的开发,测试结果如下:我们可以看到,带有频偏的基带信号o_I_fre和o_Q_fre得到了有效的频偏补偿,其补偿后的数据o_Ir和o_Qr和原始的基带数据基本一致。2.算法涉及理论知识概要基带数据帧频偏估计和补偿是一种用于纠正数字通信系统中......
  • m基于uw导频序列和cordic算法的基带数据帧频偏估计和补偿FPGA实现,包含testbench
    1.算法仿真效果本系统进行了Vivado2019.2平台的开发,测试结果如下:          我们可以看到,带有频偏的基带信号o_I_fre和o_Q_fre得到了有效的频偏补偿,其补偿后的数据o_Ir和o_Qr和原始的基带数据基本一致。 2.算法涉及理论知识概要     基带数据帧频偏估计......
  • 在 Java 中自定义反序列化:实现可序列化接口
    实现可串行化接口的功能Serialized接口用于管理Java默认序列化机制使用的序列化和反序列化过程。Java虚拟机(JVM)通过该类的Serialized接口实现来指示该类是否具有可序列化和反序列化的能力。该接口不仅有利于序列化,而且还使开发人员可以自由地更改默认的反序列化行为。由......
  • P2501 [HAOI2006] 数字序列
    原题是思路非常值得学习的一道题第一问:首先我们感性上觉得这题应该和LIS有一点关系,但里面有一点问题:1750505018如果我们求LIS的话,我们会认为只需要改掉505050即可,但其实我们只改掉这些数,我们是无法做到让数单增的我们发现这个限制写成数学语言即为:\(a_i-a_j\geq......
  • 为什么基于transformer的序列分类不用decoder模块?
    Transformer原本是为机器翻译设计的编码-解码(Encoder-Decoder)结构。在序列分类任务中,主要利用的是Transformer的Encoder模块来获取输入序列的特征表示,而不需要Decoder模块,主要有以下原因:解码模块主要用来生成目标序列,而分类任务只需要判别整个源序列的类别,不需要生成目......
  • php反序列化神奇构造
    来自[网鼎杯2020朱雀组]phpweb打开看看,我超,孙......