- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法合集之《从“k倍动态减法游戏”出发探究一类组合游
从“k倍动态减法游戏”出发探究一类组合游戏问题 上海市上海中学 曹钦翔 指导教师:上海市上海中学 毛黎莉 目录 一:引言 二:问题的提出 三:动态规划的通式解法 四:基于动态规划的优化 4.1利用单调性解决“k倍动态减法游戏” 五:不基于动态规划的思考 5.2利用贪心解决BOI2008 game NP状态 所谓N状态,是指当前即将操作的玩家有必胜策略(N来源于Next player wins.)。 所谓P状态,是指先前刚操作完的玩家有必胜策略(P来源于Previous player wins.)。 定理:P状态的一切后继都为N状态,N状态拥有至少一个后继是P状态。 通式动态规划解法 步骤1:把所有“胜利终止状态”标记为P状态,“失败终止状态”标记为N状态。 步骤2:找到所有的未定状态中,所有后继都被确定是N状态的状态,设置为P状态。 步骤3:找到所有的未定状态中,可以一步到达P状态的状态,都设置为N状态。 步骤4:若上两步中没有产生新的P状态或N状态,程序结束,否则回到步骤2。 时间复杂度——所有状态的决策数之和 k倍动态减法游戏 有一个整数S(=2),先行者在S上减掉一个数x,至少是1,但小于S。之后双方轮流把S减掉一个正整数,但都不能超过先前一回合对方减掉的数的k倍,减到0的一方获胜。问:谁有必胜策论。 通式解法 NP(m,n)表示S还剩下m且接下去即将操作的玩家最多能减去n的状态,则初始状态为NP(S,S-1)。 规定,若在NP(m,n)状态下,即将操作的玩家必胜则NP(m,n)=1,否则NP(m,n)=0。 若用动态规划计算所有NP(m,n),则判定胜负的时间复杂度为O(n3)。 优化1 状态单调性 记f(m)=min{n|NP(m,n)=1} 优化1 NP(m,n)=0 当且仅当 对于任意r=1,2,3…n有m-r0且NP(m-r,kr)=1。 优化2—决策单调性 优化2—决策单调性 所有这些直线是平行的 随着m增大逐渐向下向右移 每一堵墙都是固定的、右端有界的 优化2—决策单调性 逐个检验栈中的“墙” 若某堵“墙”不能挡住从(m,0)格子出发斜率为k-1的直线,那么该“墙”出栈 否则,若这堵“墙”能挡住斜线,则循环结束并得出f(m)的值。 最后,根据f(m)可确定一堵新“墙”的位置和长度,新“墙”入栈。 时间复杂度:O(S) BOI 2008 game 一个n*n的棋盘,每个格子要么是黑色要么是白色。白格子是游戏区域,黑格子表示障碍。 指定两个格子AB,分别是先手方和后手方的起始格子。A和B这两格子不重合。 游戏中,双方轮流操作。每次操作,玩家向上下左右四个格子之一走一步,但不能走进黑色格子。有一种特殊情况,当一方玩家,恰好走到当前对方所在的格子里,他就可以再走一步(不必是同一方向),“跳过对手”。 胜负的判定是这样的,若有一方走进对方的起始格子,就算获胜,即使是跳过对方,也算获胜。 通式解法 用(x1,y1,x2,y2)表示状态。 其中(x1,y1)是A的当前位置,(x2,y2)是B的当前位置。另外,还需要一位状态表示当前的操作这是A或B。 因此,状态总数至少为O(n4)个,尽管每个状态的状态转移代价为O(1),但总时间复杂度为O(n4),太高了。 而且状态数为O(n4)也意味着动态规划已经没有优化的余地,算法的设计必须跳出动态规划的框架。 贪心思路 “先” ? 贪心的信号 ? 两人都应沿着两起始点间的最短路径走 注意到,两个人需要走的路程是相等的 所以如果没有“跳过对手”的规则,先行者将必胜! BOI官方解答 记d为AB之间最短路的距离。 若d为奇数,A必胜!所以只要考虑d时偶数的情况 用数组LAi存贮,在AB最短路径上,且与距离A为i的格子。 记NP_A[i,j,k]表示,轮到A操作时,A在LAi中的第j个格子上,B在LAd-i中的第k个格子上的状态。 NP_B[i,j,k]表示,轮到B操作时,A在LAi+1中的第j个格子上,B在LAd-i中的第k个格子上的状态。 BOI官方解答的错误 BOI的官方解答中认为,数组NP_A[i,j,k]和数组NP_B[i,j,k]表示的状态总数为O(n3)数量级。 但是,形式上的三位数组并不等于包含的数据为立方阶。事实上,这三维都不是O(n)的。 进一步的优化 首先,不属于任何一个数组LAi的白格子等同于黑格,所以把它们涂黑。 观察得到结论:对每一个i而言,数组LAi中的格子把所有白色区域分成两份,一部分与A的距离小于i,另一部分大于i。 进一步优化 每一层LAi都是封闭的?有序存储 用归纳法可以证明: LAd-i中的格子所形成的环,可以分成两段: 一段中的LA[d-i,k]使得NP_A[i,j,k]是A必胜,另一段使
文档评论(0)