摘要: /**State: 1848 0MS 320K 994 B C++*题目大意:* 给定3堆棋子,每次可以从每一堆中拿斐波那契个棋子,最后* 先取完者胜,判断该局是否为奇异局势(P或N点);*解题思路:* 典型的求sg函数即可求解。*/#include <iostream>#include <stdio.h>using namespace std;const int MAX = 1024;int sg[MAX];void pre_init(){ int fib[1024]; fib[0] = fib[1] = 1; ... 阅读全文
posted @ 2012-07-26 16:30 cchun 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 转载:http://www.wutianqi.com/?p=1081以下是我从网上收集的关于组合博弈的资料汇总:有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。两个人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们来分析一下要如何才能够取胜。(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜. 阅读全文
posted @ 2012-07-26 15:43 cchun 阅读(231) 评论(0) 推荐(0) 编辑
摘要: /**State: 1704 Accepted 200K 16MS C++ 594B*题目大意:* 一个1*M的棋盘上有N个棋子,初始位置一定,两人轮流操作,* 每次移动一枚棋子,要求只能向左移且至少移动一格,而且不* 能到达或经过以前有棋子的格子,谁无法移动棋子就算输。*解题思路:* 先考虑两个棋子靠在一起的时候,这两对棋子就构成了一个* 奇异局势(P点)。所以可以把题目中的棋子分解为两对两对,* 两对两对之间是不需要考虑什么的。在同一对棋子中,如果对* 手移动前一... 阅读全文
posted @ 2012-07-26 15:27 cchun 阅读(1450) 评论(0) 推荐(0) 编辑
摘要: /**State: 1067 Accepted 176K 16MS C++ 435B*题目大意:* 威佐夫博弈*解题思路:* 略。*/#include <iostream>#include <stdio.h>#include <cmath>using namespace std;int main(void){ int big, small; while(scanf("%d %d", &big, &small) == 2) { if(big < small) { big ... 阅读全文
posted @ 2012-07-26 15:26 cchun 阅读(339) 评论(0) 推荐(0) 编辑
摘要: 博弈论(一):Nim游戏重点结论:对于一个Nim游戏的局面(a1,a2,...,an),它是P-position当且仅当a1^a2^...^an=0,其中^表示位异或(xor)运算。Nim游戏是博弈论中最经典的模型(之一?),它又有着十分简单的规则和无比优美的结论,由这个游戏开始了解博弈论恐怕是最合适不过了。Nim游戏是组合游戏(Combinatorial Games)的一种,准确来说,属于“Impartial Combinatorial Games”(以下简称ICG)。满足以下条件的游戏是ICG(可能不太严谨):1、有两名选手;2、两名选手交替对游戏进行移动(move),每次一步,选手可以在 阅读全文
posted @ 2012-07-26 15:25 cchun 阅读(895) 评论(0) 推荐(0) 编辑
摘要: /**State: 164K 0MS C++ 1254B*题目大意:* 对于n堆石子,每堆若干个,两人轮流操作,每次操作分两步,* 第一步从某堆中去掉至少一个,第二步(可省略)把该堆剩余* 石子的一部分分给其它的某些堆。最后谁无子可取即输。*解题思路:* 1、先考虑1堆的时候,1堆当然是N点(必胜点),* 2、然后考虑2堆,细想一下可以发现,当2堆一样时,这个时候* 的目的就是要把对方给逼到只有2堆都是1的时候,就能必胜了。* 但是想一下,后手只要模范先手所做的动作,那么... 阅读全文
posted @ 2012-07-26 02:59 cchun 阅读(313) 评论(0) 推荐(0) 编辑