问题中的变与不变.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
问题中的变与不变 陈雪 长沙市雅礼中学 410007 【】【】【】【】 ↓ ↓ 图1 2只蚂蚁相撞后的情况 将这2只蚂蚁有用的信息也就是速度 (是向量)和当前位置记录下来一起构成集合U,也就是。 在蚂蚁A和蚂蚁B相遇前瞬间一刻, 而在蚂蚁A和蚂蚁B相遇后瞬间一刻, 我们发现U=U’,也就是说虽然对于每只蚂蚁,它的速度发生了改变,但是把这2只蚂蚁放在一个集合看的话,这个集合并没有发生变化。或者说,在同一个集合内的蚂蚁相遇,这个集合是不会变的。 于是把所有的蚂蚁看成一个大集合。 根据上面说提到的,在这个集合V内的任何相遇对于集合V都没有影响。 同时我们通过集合V可以知道,虽然每只蚂蚁掉落的时间Ti无法求出,但是所有的Ti所构成的集合T我们是可以求出来的。 事实上就是T={第I只蚂蚁按初始方向走到一端点的时间|1≤i≤N}。 得到了这个有效的结论后,我们回到原来的问题:它们最早何时全部掉落,最迟何时全部掉落。 先考虑最早何时全部掉落:根据T={第I只蚂蚁按初始方向走到一顶点的时间|1≤i≤N},我们贪心的让每只蚂蚁都朝离自己最近的端点爬行,即可保证T中最大值最小。 同理最迟何时全部掉落的情况就是每只蚂蚁朝离自己最远的端点爬行,即可保证T中最大值最大。 最终我们得到了一个时间复杂度为O(N)的算法了。这已经是理论的下限了。 小结 通过集合的概念,我们将原来要维护每个蚂蚁的方向,位置这些规模庞大的变量转化成一些“常量”。而通过这些“常量”不用维护就可以直接得出最终结果。 集合操作在这类变量转化成“常量”的问题有极广泛地运用,常常可以利用题目给定的条件,来构造集合,然后利用集合内元素之间的特殊性质来判断无解或者优化算法。 通过这道题目我们也能看到,仔细观察,从细节入手,寻找变量之间的联系,才能找到将变量转化成“常量”的方法。 例2:Navigation Game[2] 这里有一个N行M列的方阵,第N行象征着这里,第1行象征着海那边的彼岸。这中间的N-2行象征着你所期盼的大海。 你的目标是,控制一艘船,从这里的任意一个停泊处(用“H”表示),经过最短的航行时间到达对岸的任意一个停泊处。只有这样,你才可以通过这个通道。 你的船只能向左,向右或向上前进,一次一格,而且除非登陆(这时你必须到达一个停泊处,从而结束你的游戏),你是不能驶向陆地的。 记住,人生没有回头路。因此,一旦你离开一个格子,就永远也无法返回。 向着目标航行永远是一件令人愉快的事情。因此向上航行只需要消耗一个单位的时间。但是,看似原地打转的左右方向的航行会让人厌倦。如果某次左右航行之前你已经连续进行了x次左右航行,你这次左右航行所消耗的时间就是x+1个时间单位。 海上你可能会遇到: O:障碍物。障碍物占据的格子,你永远也不会到达。 F:命运之轮。经过这里,你的命运会从此逆转。我了解你的命运有多么不幸。因此,你必须在航行途中经过奇数次命运之轮,才能安全到达彼岸。 B:祝福石。走到这里是不需要时间的。 S:暴风雨的咒符。走到这里所需的时间是正常情况的两倍。 H H O B F F S O O O O O O O O O F O H 图2 例2的一个样例说明 数据范围约定: N,M≤1000。 分析:根据题目的要求,不能走回头路,同时只能向上或者向右或者向左,于是我们考虑使用动态规划:设表示从起点到(I,J)且走过的命运之轮的次数为T的最少的代价(T表示奇偶性)。设表示从(I+1,J)到(I,J)的代价。 于是得到状态转移方程: (其中表示从(I,K)移动到(I,J)按照题目所给要求的代价,且(I,K)到(I,J)之间没有障碍物,T’=T xor (I,K)到(I,J)之间F个数) 假设如果没有题目所限制O,S的限制,那么。 首先我们只考虑从左往右走。那么状态转移方程可以写成: 不妨另=,=。状态转移方程就变成了 考虑Ui的最优决策K,那么满足(ikl): 另,。把,画在平面坐标轴上,根据上面的式子有(,)-(,)之间的斜率小于i的时候,决策k比决策L更优。事实上这是一个经典的斜率优化动态规划的模型[3]。根据一般性我们知道维护一个队列表示(,)的凸包中的下凸部分即可在均摊O(n)的时间内求出最优值。具体操作如下:用stack队列来表示这个凸包的下凸部分。同时设队首指针st和队尾指针en。根据Stack

文档评论(0)

山丹丹 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档