[HNOI 2013] 旅行 (数学)

感觉此题难啊,数学还是太渣了,看了半天的题解才算明白了点儿。

题目大意

给一个长度为n且仅由1和-1组成的序列ai, i = 1, 2, ..., n,每个位置都有另一个值vi,要求用某种方案将序列划分为m(0 < m < n)个非空连续子序列,使得所有子序列中和的最大绝对值最小,并且在所有满足上述条件的方案中划分位置的v[i]序列字典序最小。

猜想及证明

\(S_i = \sum_{j = 1}^{i}{a_j}\)

记题目中说的和的最大绝对值的最小值为

有如下几个结论

  1. 并且,则
  2. 并且,则
  3. ,则

证明:

  • 第一条结论是显然的
  • 对于第二条结论,首先可以肯定,所以。我们要证明对于和为零长度为n的序列,始终存在方案将其划分为i段(i = 1, 2,..., n),且每一段的和都是-1, 0, 1中一个(即)。这样我们就能得到。证明方法如下:
    • 考虑将序列划分为n段,显然这是满足条件的,因为每一段的和都为1或-1
    • 现在考虑将这n段中相邻的进行合并,由于整个序列的和为0,故一定能找到一对相邻的段,它们一个的和为-1,另一个为1,令它们合并后,新的段和为0,得到划分为n - 1段的方案
    • 继续执行合并。由于整个序列和为0,每一段的和都为-1, 0, 1,所以只要序列中存在1,就一定存在-1,且始终存在相邻或中间仅隔着0的1和-1,且0可以任意合并,所以可以一直合并下去,直到最后仅剩下一个0,即为合并成一段的方案
  • 对于第三条结论,如果,我们可以肯定的是。原因是如果每一段的和的绝对值都小于,整个序列的和不可能为。下面我们证明可以构造出的方案。
    • 如果,相当于把一堆大小为的物品分成堆,只要保证尽量平均即可
    • 如果,由于需要保证每一段非空,我们要换一种方式考虑。考虑先取出个位置,可以做到每一段和的绝对值都为1,也就是说,每一段中可一取出一个数使得剩余部分和为0,这就又变成上面的问题,已经证明对这些部分继续划分,所以

计算方案

这题思维难度很大,就算上面的结论猜到了,敢用了,想不出下面计算字典序最小的方案的算法也是没有用的。

对于并且的情况,由于有且仅有前缀和为0的位置可选,我们仅需要维护一个单调队列,对第i个划分位置入队直到后面的前缀和为0的位置不足时为止,然后取出队中最小的即可。

对于其他情形,我们当前选择的位置受上一个位置限制。假设第个位置为,给定另一个位置可以作为第个位置当且仅当

  

这个就有些难。我们对每个S值维护一个单调队列,得到第个位置后,我们访问所有S值在中的单调队列。

看起来是不是很暴力?似乎又要MLE又要TLE的样子?让我们仔细分析空间和时间复杂度,由于我们所有位置都最多入队一次,故空间复杂度为。因为,总共选m次,故总的时间复杂度为

转载于:https://www.cnblogs.com/jasonyu/p/hnoi_2013_travel.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值