天天写算法之博弈的总结

这一章节: 点击打开链接
一共做了八个题目,涵盖了几个模板题目,巴什博弈,Nim博弈,SG打表算法:

第一个题目: Brave Game 这个题目,一堆石头n个,两人分别拿,可以取走1到m个,最先拿完的胜利:
第二个题目: Good Luck in CET-4 Everybody!,总共n张牌,两人轮流拿,抓的牌只能是1 2 4 8 (2的n次幂), 最先拿完的胜利
第三个题目:Fibonacci again and again 一共3堆棋子,分别是m,n,p,但是每次拿的时候只能拿Fibonacii数的个数,最先拿光的人胜利
第四个题目 : Rabbit and Grass 类似于上边这个,只不过是棋子的堆数变多了。拿的时候,随意数量的拿。
第五个题目: Being a Good Boy in Spring Festival  M堆牌, 每堆牌的数量分别为Ni每走一步可以任意选择一堆并取走其中的任意张牌;桌子上的扑克全部取光,则游戏结束;最后一次取牌的人为胜者。
第六个题目:悼念512汶川大地震遇难同胞——选拔志愿者,题目描述是这样的:两人轮流捐款,每次捐款额必须为正整数,并且每人每次捐款最多不超过m元最先使得总捐款额达到或者超过n元(0<n<10000)的一方为胜者
第七个题目:kiki's game  一个N*M的矩阵,每次可以向左,向下,向左下移动一次,最终到达左下角的胜利。
第八个题目:Be the Winner  M堆苹果,每次随意数量的拿,最后拿完的人输掉(和上面不一样的地方在这里)

我们整体上观察一下这几个题目的描述,发现1  2  6 7 这四个题目理论上是一个类型的,其中2和6和7进行了一定的变形。
我们先看1,这个是最基础的, 巴什博弈的最基础的模板题目,直接看能不能除的开m+1。
第二个题目,看能不能除以3,这个可以绘制PN图,最后发现3的倍数都是N

第六个题目,就是倒过来想的第一个题目,也是开能不能整除m+1

第七个题目,绘制PN图,得出来的结果。
因此可以看到这几个题目,如果不能直接看出来的一般都是用PN图来处理一下。(这是只有一堆的情况)

而 3 4 5 8 是一类,是多堆:
其中第三题,第四,五个题目,都是Nim博弈,但是第三个题目,由于不是任意取走任意数量,因此需要sg打表,才能得到结果,其实都可以sg打表,只是任意数量后,打不打表数值上都一样。

但是上面这些都是在一个前提下,那就是最后拿完的胜利
而如果最后拿完的输掉的话,那么每一堆是1的情况下就是特例。需要单独判断,直接%2,看结果。

猜你喜欢

转载自blog.csdn.net/qq_36616268/article/details/80195353