取石子游戏的几种变形.ppt

  1. 1、本文档共45页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
取石子游戏的几种变形

证明 按照NimGame法则取完石子后,必定会给对手留下⊕值为0的局面。因此不可能给对手留下2)的局面(容易证明,2)局面的⊕值肯定不为0),而对手一次最多将一堆石子数大于1的石子堆处理掉。因此2)的情况肯定会出现。 相反,若⊕值为0,则无论如何走都会给对方留下2)或3)的情况,必败。 实例 n = 4, {1,1,2,2} 第一步若拿掉一堆为2的石堆,则只剩一堆1的石堆。必败。 若拿掉一堆为1的石堆,对方也拿掉一堆为1的石堆,无论我们接下来怎么取,都只剩一堆1的石堆。必败。 在一堆为2的石堆中拿掉一颗石子,只剩一堆1的石堆。必败。 n = 4,{1,1,2,3} 我们可以在3的石堆中拿掉一颗石子,变为一个xor值为0的必败状态,所以必胜。 A stone game 一堆石子有n颗,两个人轮流从中取石子,第一个人第一步最多取n-1颗,接下来每一步,假设上一步取了x颗,当前取石子的人最多可以取k*x颗,当然一个人不能一颗石子也不取。取走最后一颗石子的人获胜。假设两个人都使用最优策略,请问对于给定的n,k先手能否获胜? 分析 定义x为绝对必败态,当且仅当无论何种情况下只要走到了这个状态,那么先手必然失败的状态。 假设前1..i-1个绝对必败态p[1]..p[i-1](p[1]=1)。 p[i-1]+1,p[i-1]+2,…,p[i-1]+m都是必胜态的充分条件是:k*mp[i-1]。(先手可以走到p[i-1]的状态同时第二个人不能一次把所有石子拿走 ) 分析 那么是不是m+1就是必败的呢,事实上我们也可以选择不直接跳到p[i-1]去,这时问题转化成了一个(x-p[i-1])的子问题,即看谁会被迫先走到p[i-1]的绝对必败态去 。 接下来的第一个必败态是p[i-1]+p[j],其中p[i-1] + p[j]=m。 实例 当k=10时,假设当前已经求出的必败态集合是 {2 3 4 5 6 7 8 9 10 11 13 15 17 19 21 24 27 30 33 37 41 46 51 57 63 70 77 85 94 104 115 }。 我们要求后一个必败态,m = (115 / 10) = 11 , p[j] = 13 , p[j - 1] = 11; 显然从116-126都是必胜的,他们可以转化到115这个必败态,那127呢?我们可以取1个石子,转移到126,显然这时126无法取到足够多的石子转移到115,它成为必败态,于是127也是必胜态。而128 = 115 + 13 则成为了必败态,因为无论是转移到127还是126它都使下一个状态必胜,这里的p[j] = 13 , p[i-1] = 115 ,所以 p[i] =128。 SGU429 有n堆石子,将这n堆石子摆成一排。游戏由两个人进行,两人轮流操作,每次操作者都可以从最左或最右的一堆中取出若干颗石子,可以将那一堆全部取掉,但不能不取,不能操作的人就输了。 问:对于任意给出一个初始一个局面,是否存在先手必胜策略。 分析 设fleft[l][r]表示对于Al,…Ar当Al取多少时(其余的A值不变),这个状态是必败的。同理可设fright[l][r]。 只考虑(Al,Ar)的组合,我们说(X,Y)是个必败态当且仅当X,Al+1,..,Ar-1,Y是一个先手必败的状态 。 分析 首先得到2个初始的必败态,即(0,fright[l+1][r])和(fleft[l][r-1], 0),同时必败态应满足以下条件: 每行有且仅有一个必败态。 每列有且仅有一个必败态。 这是因为如果(p,x),(p,y)都是必败态,不妨设x=y,那么(p,y)可以转移到(p,x)去,矛盾。 计算 设L=fleft[i][j-1],R=fright[i][j-1],x=Aj,则fleft [i][j]由以下方式确定:不妨设L≥R, 当xR时,fleft[i][j]=x; 当x=R时,fleft[i][j]=0; 当R<x≤L时,fleft[i][j]=x-1; 当xL时,fleft[i][j]=x。 同理可确定fright[i][j]。 实例 fright[l+1][r]=8,fleft[l][r-1]=6。 失败状态为:(0,8),(6,0),(1,1),(2,2),..,(7,6),(8,7),(9,9),(10,10)。 SPOJ4060 有n个石子放成一堆。A和B轮流操作,A先手。操作为投掷一枚硬币,如果正面朝上、则从石子堆中取出一枚石子。A有P的概率投出他想投的面,B有Q的概率投出他想投的面。(P,Q≥0.5)问A赢的期望。 分析 A先手,双方都希望投正面,A,B得到石子的概率分别是: PR1 = p/(1-(1-p)(1-q)); (等比求和) P

文档评论(0)

153****9595 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档