- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
NOI 2004 解题报告 Day1: #1:维护数列(sequence) 这道题是NOI2003《文本编辑器》的难度加强版。 依然是用块状数组,插入删除没什么好说的。 修改: 每一个块加一个变量same记录该块中所有的数是否别统一修改以及被统一修改的值。 在执行修改操作时如果一整块都统一修改只改same,如果只有部分修改就直接该数组,复杂度是O()。 翻转: 每一个块加一个变量rev记录该块是否被翻转。 如图,黑框表示一个块,先将两边的部分进行翻转,再将中间的整块翻转(改变链表的结构,同时置rev为原来的相反值)。 复杂度O()。 求和: 这个比较简单,每个块设一个sum记录当前块中的和,依然分整体和部分考虑,复杂度O()。 求和最大的子列: 先说一下比较简单的方法,从左边累加到右边,设累加值为tt,当tt 0时,tt置为0,统计过程中的最大值就是所求。 复杂度是O(n),是整个算法的瓶颈。 从整体考虑来优化: 每个块设以下变量: max1:从左边累加到右边的过程中的最大值。 max2:该块内的最大子列。 sum1:计算max1时的最终累加值。(该值与sum相等) sum2:计算max2时的最终累加值。(该值表示以该块结尾的累加值) 依然设立累加值tt,从左到右处理每一块,考虑以下几种情况: 子列在上一块或更前开始,到该块结束:此时最大值为tt+max1 子列在该块开始和结束:显然是max2 子列在上一块或更前开始,到下一块或更后结束:此时改变tt为tt+sum1,转到下一块处理。 子列在该块开始,在下一块或更后结束:此时改变tt为tt+sum2,转到下一块处理。 对于两种改变tt的方法,选择使tt最大的一种。在这个过程中更新最大值,就是所求。 特殊的,如果整个数列全为负数,则输出整个列中最大的数(每个块额外设一个mm记录该块中的最大数)。 复杂度O()。 因为在修改和翻转一整块时只做了个标记,该块中的数并没有改变,所以在处理部分时需要调用过程getsame和reverse将该块中的数改变。 在求最大子列的时候,对于一个标记了rev的块,必须从右往左累加,此时的max1,max2,sum1,sum2无效,如果重新累加则时间复杂度降到O(n)。 为了解决这个问题,不妨对于每个块,分别维护不同方向的累加结果(max1,max2,sum1,sum2),这样复杂度仍然是O()。 这样,每个操作的复杂度都是O(),总的复杂度是O(m),再加一些常数优化,勉强可以过所有的数据(个人觉得时限稍微紧了点)。 ps.这道题我编了10k的程序,累死了,无意间看了一下标程,12k,我还有什么好说的呢? #2:智慧珠游戏(zhzyx) 这道题其实不难,但是输const实在快让人发疯了,我光输const就输了3k。 然后就是搜索了。 有两种搜索方法,一种是确定每个珠子的放在哪里,一种是确定的位置放哪个珠子,实验证明,后者的效率要比前者高很多(也许是数据的原因)。 只是简单的DFS就可以得70分了。(据传言数据超级的弱) 剪枝: 在搜索过程中用floodfill确定每个连通块,如果有小于3的连通块,或者大小在2~5之间却无法与未使用的珠子匹配则肯定无解,剪枝。 还要考虑搜索的顺序,是从左上角开始还是从右下角。 这道题从右下角搜可以过所有数据,而从左上角搜第一个数据TLE(这个只是数据的原因)。 不妨考虑已放置的块离两端的距离,在判断从哪里开始搜索。 #3:魅力华尔兹(adv1900) 动态规划。 先考虑最简单的,设dp[i,j,k]表示第i时间在(j,k)处滑行的最长距离。 dp[i,j,k]=max{dp[i-1,j’,k’]+1,dp[i-1,j,k]} 复杂度是O(TMN),可以过50%的数据。 数据规模很具有提示性,考虑从每一段时间入手。 设dp[i,j,k]表示在第i段时间末在(j,k)处滑行的最长距离。 dp[i,j,k]=max{dp[i-1,j0,k0],dp[i-1,j1,k1]+1,dp[i-1,j2,k2]+2,..,dp[i-1,jn,kn]+n} 时间复杂度仍然是O(TMN)。 以一个方向为例,在求A的时候,需要统计黄色框中的最大值,而求B的时候需要统计绿色框中的最大值。 在求A的过程中统计红色框中的最大值,设为op,则在求B的时候,只需要考虑op和C处,大大减少了重复运算。 如果绿色框中的最大值不在B,那么op可以继续使用,否则需要重新计算op。 这样复杂度相比与O(TMN)要小很多,但并不是确切的O(KMN),因为要不时的重新计算op。但是已经可以过所有数据了。. 看了Amber的blog,发现自己写的垃圾了。 在计算dp的时候用“单调队列”,所谓的单调队列,就是维护一个这样的队列。 每个点记录两个值: time-
您可能关注的文档
最近下载
- 中国文化概论课件-中国文化的现代化.ppt VIP
- 酒店基本情况调查表.docx VIP
- 《GNSS定位测量技术》 课件 子项目1、2 GNSS定位技术的发展;坐标系统与时间系统.ppt
- 人教人音版七年级音乐上册《红旗颂》课件下载.ppt VIP
- 2024年新人教版一年级上册数学全册教案(新版教材).docx
- 消防检测课件.pptx VIP
- 生物制药实验室管理软件:LabVantage二次开发_(5).LabVantage用户界面定制.docx VIP
- 中国文化概论课件-中国文化的发展历程.ppt VIP
- GB51016-2014 非煤露天矿边坡工程技术规范.pdf VIP
- 一种抗单粒子烧毁的高电子迁移率晶体管及其制备方法.pdf VIP
文档评论(0)