摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1760题意:出处http://blog.csdn.net/qiqijianglu/article/details/7952261题意:给你一个n*m的矩形,0表示空着的,1反之,现在两个人轮流放2*2的矩形,谁不能放了,谁就输了。找sg值,可以选择暴力,也可以利用sg值的特点简化。暴力就跟取石子一样,没什么差别,DFS搞定。把矩阵看成一个字符串,字符串就是一个状态。其实我们也可以不暴力求sg值,因为只要当前状态能到达一个sg值为0的点,当前状态就是必胜点。若当前点到达的所有状态都是必胜的,那么当前点就是必败点 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1851简单博弈问题(巴什博弈-Bash Game)巴什博弈:只有一堆n个物品,两个人轮流从这对物品中取物,规定每次至少取一个,最多取m个,最后取光着得胜。很容易想到当n%(m+1)!=0时,先取者必胜,第一次先拿走n%(m+1)个,以后每个回合都保持两人拿走的物品总和为m+1即可。这个游戏还可以有一种变相的玩法:两个人轮流报数,每次至少报一个,最多报10个,谁能报到100者胜。题意:有n堆石头,每堆有mi个石头,每次可从其中的一堆中最少取一个,最多取li个。老师每次都先取,最后取光者为胜。算法分析:此题可以把 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1730现在我们看单独的一行,也就是说两个人进行棋子的移动,使得任何一方不能走了便是获胜!那么我们换一个方式看棋局的必败态,也就是当两个棋子的相邻的时候,那么先手是必败的。这个时候我们假设两个人都是热衷于取得胜利,并且是要使的两个棋子间的距离减小的走子方式,于是我们通过sg函数的定义,爆出sg函数值就发现sg函数值就是两个棋子的距离的绝对值减1.其实这个还是可以理解的,因为我们看当两个棋子相邻的时候,已经是一个必败态了。因此我们得到了每一棋局的sg函数值。最后对sg函数值进行异或看结果就能知道整个棋局的状态了。 阅读全文
摘要:
做过的第一题真正意思上的sg博弈。然后各种不会。http://acm.hdu.edu.cn/showproblem.php?pid=1729转载出处:http://qianmacao.blog.163.com/blog/static/2033971802012343334856/博弈SG函数问题、寻找必败态题目大意:(取石子游戏)有n个箱子,体积为Si,当前箱子里的石子数为Ci。两个人轮流往箱子里放石子,而且每一次放是数量都有限制,不能超过当前箱子内石子数的平方。例如箱子里有3颗石子,那么下一个人就可以放1~9颗石子,直到箱子被装满。当有一方放不下石子时游戏结束,最后放不下石子的人输。算法分析 阅读全文
摘要:
转载出处:http://blog.163.com/scuqifuguang@126/blog/static/171370086201101711276278/定义:sg(x) = mex ( sg(y) |y是x的后继结点 )其中mex(x)(x是一个自然是集合)函数是x关于自然数集合的补集中的最小值,比如x={0,1,2,4,6} 则mex(x)=3;什么是后继结点?所谓后继结点就是当前结点经过一个操作可以变成的状态。比如对于娶4石子游戏,假如每次可以取的数目是1,2,4,当前的石子数目也就是当前状态是5,那么5的后继结点就是{5-1, 5-2, 5-4}={4,3,1};如果5的三个后继结 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1849Nim博弈算法分析:Nim游戏模型:有三堆石子,分别含有a、b、c个石子。两人轮流从某一堆中取任意多的石子,规定每次至少取一个,多者不限。最后取光者得胜。定理1:Nim游戏的一个状态(a、b、c)是P状态,当且仅当a^b^c =0。对应此题就是:共有m个棋子就是m堆石子,把每个位置的标号等价于该堆石子的数目,取走最后一颗石子的人获胜,就是最后一个回到0位置的人获胜。即Nim博弈问题。View Code // I'm lanjiangzhou//C#include <stdio.h># 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=2516这道题就是简单的博弈,但是分析时候要一点时间。分析: n =2时输出second; n =3时也是输出second; n =4时,第一个人想获胜就必须先拿1个,这时剩余的石子数为3,此时无论第二个人如何取,第一个人都能赢,输出first; n =5时,first不可能获胜,因为他取2时,second直接取掉剩下的3个就会获胜,当他取1时,这样就变成了n为4的情形,所以输出的是second; n =6时,first只要去掉1个,就可以让局势变成n为5的情形,所以输出的是first; n =7时,first 阅读全文