ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:25.88KB ,
资源ID:19002286      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19002286.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(博弈问题Word文档下载推荐.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

博弈问题Word文档下载推荐.docx

1、采用适当的方法,可以将非奇异局势变为奇异局势。假设面对的局势是(a,b),若 b = a,则同时从两堆中取走 a 个物体,就变为了奇异局势(0,0);如果a = ak ,b bk,那么,取走b - bk个物体,即变为奇异局势;如果 a = ak , b ak ,b= ak + k,则从第一堆中拿走多余的数量a - ak 即可;如果a ak ,b= ak + k,分两种情况,第一种,a=aj (j k),从第二堆里面拿走 b - bj 即可;第二种,a=bj (j k),从第二堆里面拿走 b - aj 即可。从如上性质可知,两个人如果都采用正确操作,那么面对非奇异局势,先拿者必胜;反之,则后拿者

2、取胜。那么任给一个局势(a,b),怎样判断它是不是奇异局势呢?我们有如下公式:ak =k(1+5)/2,bk= ak + k (k=0,1,2,.,n 方括号表示取整函数)奇妙的是其中出现了黄金分割数(1+5)/2 = 1。618.,因此,由ak,bk组成的矩形近似为黄金矩形,由于2/(1+5)=(5-1)/2,可以先求出j=a(5-1)/2,若a=j(1+5)/2,那么a = aj,bj = aj + j,若不等于,那么a = aj+1,bj+1 = aj+1+ j + 1,若都不是,那么就不是奇异局势。然后再按照上述法则进行,一定会遇到奇异局势。(三)尼姆博奕(Nimm Game):有三堆

3、各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。这种情况最有意思,它与二进制有密切关系,我们用(a,b,c)表示某种局势,首先(0,0,0)显然是奇异局势,无论谁面对奇异局势,都必然失败。第二种奇异局势是(0,n,n),只要与对手拿走一样多的物品,最后都将导致(0,0,0)。仔细分析一下,(1,2,3)也是奇异局势,无论对手如何拿,接下来都可以变为(0,n,n)的情形。计算机算法里面有一种叫做按位模2加,也叫做异或的运算,我们用符号(+)表示这种运算。这种运算和一般加法不同的一点是1+1=0。先看(1,2,3)的按位模2加的结果:1 =二进制012

4、 =二进制103 =二进制11 (+)0 =二进制00 (注意不进位)对于奇异局势(0,n,n)也一样,结果也是0。任何奇异局势(a,b,c)都有a(+)b(+)c =0。如果我们面对的是一个非奇异局势(a,b,c),要如何变为奇异局势呢?假设 a b0,那么只要每次取出石子使得T0,即先取者有获胜的方法。【综合一、三给出】任给N堆石子,两人轮流从任一堆中任取(每次只能取自一堆),规定每方每次最多取K颗,取最后一颗石子的一方获胜.问先取的人如何获胜?与上面的问题比,这个更复杂一些,我们可以这样做令Bi=Ai mod(K+1)定义TB1 xor B2 xor . xor Bn如果T0 那么没有获

5、胜可能,先取者必败如果T0 那么必然存在取的方法,使得T0,先取者有获胜的方法假设对方取了在Ai中取了r=K个如果Ai中剩下的石子多于K 那么就在Ai中取走K+1-r个则Bi不变 T还是0如果Ai=K 那么我们需要重新计算Bi和T 按照上面的方法来做就可以了Nyoj23取石子(一)时间限制:3000ms | 内存限制:65535KB难度:2描述一天,TT在寝室闲着无聊,和同寝的人玩起了取石子游戏,而由于条件有限,他/她们是用旺仔小馒头当作石子。游戏的规则是这样的。设有一堆石子,数量为N(1=N=1000000),两个人轮番取出其中的若干个,每次最多取M个(1=M=1000000),最先把石子取

6、完者胜利。我们知道,TT和他/她的室友都十分的聪明,那么如果是TT先取,他/她会取得游戏的胜利么?输入第一行是一个正整数n表示有n组测试数据输入有不到1000组数据,每组数据一行,有两个数N和M,之间用空格分隔。输出对于每组数据,输出一行。如果先取的TT可以赢得游戏,则输出“Win”,否则输出“Lose”(引号不用输出)样例输入1000 11 100样例输出LoseWin#includeint main() int n,N,M; scanf(%d,&n); while(n-) scanf(%d %dN,&M); if(N%(M+1)=0) printf(Losen); elseWinn ret

7、urn 0;Nyoj135取石子(二)5小王喜欢与同事玩一些小游戏,今天他们选择了玩取石子。游戏规则如下:共有N堆石子,已知每堆中石子的数量,并且规定好每堆石子最多可以取的石子数(最少取1颗)。两个人轮流取子,每次只能选择N堆石子中的一堆,取一定数量的石子(最少取一个),并且取的石子数量不能多于该堆石子规定好的最多取子数,等哪个人无法取子时就表示此人输掉了游戏。假设每次都是小王先取石子,并且游戏双方都绝对聪明,现在给你石子的堆数、每堆石子的数量和每堆石子规定的单次取子上限,请判断出小王能否获胜。第一行是一个整数T表示测试数据的组数(T100)每组测试数据的第一行是一个整数N(1N100),表示

8、共有N堆石子,随后的N行每行表示一堆石子,这N行中每行有两个数整数m,n表示该堆石子共有m个石子,该堆石子每次最多取n个。(0=m,n=231)对于每组测试数据,输出Win表示小王可以获胜,输出Lose表示小王必然会败。11 1提示注意下面一组测试数据1 12 2正确的结果应该是Win因为小王会先从第二堆石子中取一个石子,使状态变为1 2这种状态下,无论对方怎么取,小王都能获胜。 int n,a,b,sum,x; sum=0;x); while(x-) scanf(%d%da,&b); sum=a%(b+1); printf(%sn,sum?Win:LoseNyoj137取石子(三)10006

9、共有N堆石子,已知每堆中石子的数量,两个人轮流取子,每次只能选择N堆石子中的一堆,取一定数量的石子(最少取一个),取过子之后,还可以将该堆石子中剩下的任意多个石子中随意选取几个放到其它的任意一堆或几堆上。等哪个人无法取子时就表示此人输掉了游戏。注意,一堆石子没有子之后,就不能再往此处放石子了。假设每次都是小王先取石子,并且游戏双方都绝对聪明,现在给你石子的堆数、每堆石子的数量,请判断出小王能否获胜。例如:如果最开始有4堆石子,石子个数分别为3 1 4 2,而小王想决定要先拿走第三堆石子中的两个石子(石子堆状态变为3 1 2 2),然后他可以使石子堆达到的状态有以下几种:3 1 2 2(不再移动

10、石子)4 1 1 2(移动到第一堆一个)3 2 1 2(移动到第二堆一个)3 1 1 3(移动到第四堆一个)5 1 0 2(全部移动到第一堆)3 3 0 2(全部移动到第二堆)3 1 0 4(全部移动到最后)可能有多组测试数据(测试数据组数不超过1000)每组测试数据的第一行是一个整数,表示N(1= 2) ,那么无论先手怎么取,后手都能再将两堆石子数置为相等,最终置成1,1的必败状态,所以此时为必败态! 而两堆石子不相等时,先后可以将两堆取相等,那么后手将要面对的就是上述必败态了! 3、n = 3 时,先手可以先取石子数最多的一堆,同时将另两堆配平,此时后手必败! 4、n = 4 时,只要有两

11、堆石子数相等,即x,y,z,z状态,先手必败,因为后手总能在置出两堆相等的情况来。 。 总结: n 为奇数: 必胜 n 为偶数且不存在偶数堆石子数相等的情况:必胜 否则:必败string.hint ct103; int n,i; while(scanf(n),n) int cur; memset(ct,0,sizeof(ct); for(i=0;iusing namespace std; int n,m,t;n,&m)!=EOF) if(nm) t=n; n=m; m=t; t=(int)(1.0+sqrt(5.0)/2.0*(m-n);%dn,t=n?0:1); Nyoj358取石子(五)4

12、himdd最近很想玩游戏,于是他找到acmj和他一起玩,游戏是这样的:有一堆石子,两个人轮流从其中取走一定的石子,取走最后所有石子的人为赢家,不过得遵循如下规则:1.第一次取不能取完,至少取1颗.2.从第二次开始,每个人取的石子数至少为1,至多为对手刚取的石子数的两倍。himdd事先想知道自己会不会赢,你能帮帮他吗?(每次himdd先手)有多组测试数据,每组有一个整数n(2=n= 2); 证明:参考资料:以下为个人思路: 根据“Zeckendorf定理”(齐肯多夫定理):任何正整数可以表示为若干个不连续的Fibonacci数之和(优先选取最大的)。 比如 n = 14 时, n = 8 + 5

13、 + 1;而先手要赢的条件是,先手必须要先取完最小的一堆,再取完次小的一堆,以此类推,并保证每堆的最后一个是自己取到的而且不能取超!听起来有点绕,举个例子: 1、先看必胜态,n不是fibonacci数的时候,令n = 9 =5 + 3 + 1: a、先手先取最小的一堆,1个,保证了最后一个是自己取得; b、此时后手开始取次小的一堆(3个石子),上面说过,要想赢的话,要保证这一堆的第3个必须是自己取得;此时后手有 1个、2个两种取法,但此处无论后手怎么取,都能保证这一堆的最后一个(第3个)是自己取得; c、此时后手开始取最后一堆(5个石子),b步先手可能取得是1或2,因此此步后手可能有1、2、3

14、、4四种取法,易知后手取3或4的话,自己立马就能取到最后一个,就赢了,而取1或2时,同上(读者自己来),仍能保证取到最后一个(此堆第5个,全局最后一个),必赢! 2、再说必败态,若n本身是fibonacci数时,已经不需要分解了,为方便观察,令n=5:实际上与上面相同,每一堆(有fib个石子)在自己先手的情况下,无论怎么取,后手都能保证自己取到这一堆的最后一个,因此后手必胜!PS:所以上面说总石子数为非fibonacci数时先手必胜的原因在于,总数目分解为若干fib数时,先手先全部取走最小的一堆1个(也是取到了这一堆的最后一个),以后每堆(有fibi个石子)都是后手先取,先手便有把握取到这一堆

15、的最后一个了#define N 100long long fibN;void Fib() fib0=0; fib1=1; for(int i=2;N; fibi=fibi-1+fibi-2; Fib(); long long n; while(scanf(%lldn) int p=0; for(int i=2;100; if(fibi=n) p=1; if(p=1)NonYesn Nyoj585取石子(六)最近TopCoder的PIAOYI和HRDV很无聊,于是就想了一个游戏,游戏是这样的:有n堆石子,两个人轮流从其中某一堆中任意取走一定的石子,最后不能取的为输家,注意:每次只能从一堆取任意个

16、,可以取完这堆,但不能不取。假设PIAOYI先取石子,请你帮他判断他是否能赢(假设他们取的过程中不发生失误,他们足够聪明)。第一行输入n,代表有n组测试数据(n=10000)以下每组测试数据包含两行:第一行:包含一个整数m,代表本组测试数据有m(m=1000)堆石子;:第二行:包含m个整数Ai(Ai=100),分别代表第i堆石子的数量。若PIAOYI赢输出“PIAOYI”,否则输出“HRDV”注意每组结果占一行。3 8 115 10HRDVPIAOYI int N,a;N); while(N-) int n; if(!n)HRDVn int sum=0; while(n-)a); sum=a;sum)PIAOYIn取石子(七)Yougth和Hrdv玩一个游戏,拿出n个石子摆成一圈,Yougth和Hrdv分别从其中取石子,谁先取完者胜,每次可以从中取一个或者相邻两个,Hrdv先取,输出胜利着的名字。输入包括多组测试数据。每组测试数据一个n,数据保证int范围内。输出胜利者的名字。HrdvYougth int n;n)!=3)YougthnHrdvn

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1