上一页 1 2 3 4 5 6 7 ··· 10 下一页
摘要: 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的点,当前状态就是必胜点。若当前点到达的所有状态都是必胜的,那么当前点就是必败点 阅读全文
posted @ 2013-04-14 22:15 南下的小程序员 阅读(224) 评论(0) 推荐(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个。老师每次都先取,最后取光者为胜。算法分析:此题可以把 阅读全文
posted @ 2013-04-14 18:36 南下的小程序员 阅读(176) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1730现在我们看单独的一行,也就是说两个人进行棋子的移动,使得任何一方不能走了便是获胜!那么我们换一个方式看棋局的必败态,也就是当两个棋子的相邻的时候,那么先手是必败的。这个时候我们假设两个人都是热衷于取得胜利,并且是要使的两个棋子间的距离减小的走子方式,于是我们通过sg函数的定义,爆出sg函数值就发现sg函数值就是两个棋子的距离的绝对值减1.其实这个还是可以理解的,因为我们看当两个棋子相邻的时候,已经是一个必败态了。因此我们得到了每一棋局的sg函数值。最后对sg函数值进行异或看结果就能知道整个棋局的状态了。 阅读全文
posted @ 2013-04-14 17:01 南下的小程序员 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 做过的第一题真正意思上的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颗石子,直到箱子被装满。当有一方放不下石子时游戏结束,最后放不下石子的人输。算法分析 阅读全文
posted @ 2013-04-14 15:31 南下的小程序员 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 转载出处: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的三个后继结 阅读全文
posted @ 2013-04-14 14:15 南下的小程序员 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 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># 阅读全文
posted @ 2013-04-14 11:53 南下的小程序员 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 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 阅读全文
posted @ 2013-04-14 08:24 南下的小程序员 阅读(155) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2147分析:我看测试数据就觉得n*m是奇数和偶数的时候进行分类就行了。没证明。网上分析:http://www.cnblogs.com/chaosheng/archive/2012/05/29/2524725.htmlP点:就是P个石子的时候,对方拿可以赢(自己输的)N点:就是N个石子的时候,自己拿可以赢现在关于P,N的求解有三个规则(1):最终态都是P(2):按照游戏规则,到达当前态的前态都是N的话,当前态是P(3):按照游戏规则,到达当前态的前态至少有一个P的话,当前态是N题意:在一个m*n的棋盘内,从(1 阅读全文
posted @ 2013-04-13 21:43 南下的小程序员 阅读(136) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1847分析:测试几组数据就看出来了。我自己测试的时候居然推错 了。嗨。(当然还是看出是巴什博弈)网上分析:找必败点,很容易知道当剩下3时,这是一个必败点,又每一个数减1或减2都可以成为3的倍数,意识到这点大概就会做了,因为假如这个n不是3的倍数,那么我们总可以让它减1或减2变成3的倍数,而作为3的倍数对手是不可能一次就拿完的说,这样一直下去…………………………最终先手者一定有机会把它变成3,或是后手者自杀,故意留给先手者2的k次幂,这样就也是胜利者,所以说3的倍数就是必败点,http://blog.csdn. 阅读全文
posted @ 2013-04-13 21:02 南下的小程序员 阅读(139) 评论(0) 推荐(0) 编辑
摘要: poj 终于突破200大关了,mark一下。hdu也快要300了。加油http://poj.org/problem?id=2234题意:有n堆石子,每人每次可以从一堆中拿走任意多个,两人轮流操作,谁无子可取谁输。输入n堆石子各自的数量,输出先手是否能赢。分析:NP问题,必胜态N(next player wins),必败态P(previous player wins)如果某状态的直接后继中有必败态那么它一定是必胜态,否则为必败态。SG函数。设函数g(x)。我们先把所有的最终局面(最终局面均为必败P局面)g(x)赋值为0。然后所有其他局面g(x)等于其直接后继状态中没有出现过的最小自然数。这样一来 阅读全文
posted @ 2013-04-13 20:08 南下的小程序员 阅读(162) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 10 下一页