NIM取子游戏是由两个人面对若干堆硬币(或石子,或。。)进行的游戏,游戏由两个人进行,设有k>=1堆硬币,各堆含有n1,n2,n3,n4.....,nk个硬币,游戏的目的就是选取最后剩下的硬币。游戏规则如下:

1)游戏人交替进行游戏;

2)当轮到每个游戏人取子时,选择这些硬币中的一堆,并从所选的堆中取走至少一枚硬币(可以将所选堆中所有硬币全部取走剩下一个空堆)。

当所有堆变成空堆时,游戏结束。最后取子的人(即能够取走最后一堆中的所有硬币的人)获胜。

这个问题中的变量是堆数k和各堆的硬币数n1,n2,n3,。。,nk,确定游戏人1还是游戏人2获胜以及游戏人应该如何取子才能获胜。

将每个堆的硬币数ni表示成基为2的数:

n1=as。。a1a0

n2=bs....b1b0

.......

nk=rs...r1r0

我们通过在前面补0的办法可以假设,所有各堆的大小都是具有相同位数的一2为基的数。我们称游戏是平衡的当且仅当

as+bs+...+rs是偶数

.......

ai+bi+...+ri是偶数

.......

a1+b1+...+r1是偶数

a0+b0+...+r0是偶数

如果游戏不是平衡的,那么就称游戏是非平衡的。如果ai+bi+...+ri是偶数,那么就称第i位是平衡的,否则就称为非平衡的。

结论是:

游戏人1能够在非平衡NIM取子游戏中取得胜利,而游戏人2能够在平衡NIM取子游戏中取胜。

设NIM游戏是非平衡的。令最大的非平衡位位第j位。那么,游戏人1用这样一种方法取子,使得留给游戏人2的游戏是平衡的取子游戏。令j是是最大非平衡位,游戏人1选择第j位是1的一个堆,然后从所选的堆中取走一些硬币使得游戏成为平衡的游戏。此后,无论游戏人2如何取子,游戏均是不平衡的,游戏人1取硬币总是使得游戏是平衡的,那么游戏人1就可以取得胜利。如果游戏从平衡状态开始,游戏人1取走一些硬币后,使得游戏变为非平衡,游戏人2取硬币使游戏变得平衡,从而可以取得胜利。

下面举一个简单的例子

硬币个数 2^3=8 2^2=4 2^1=2 2^0=1
11 1 0 1 1
6 0 1 1 0
10 1 0 0 0
8 1 0 0 0

从表中可以看出,,简单的看就是第一列,第二列,第四列1的个数是奇数,游戏是非平衡的,最大非平衡位是2^3=8,因此取一个这个位是1的进行取硬币,这里取11个硬币的堆,取5个,使得游戏变为平衡的,如下

硬币个数 2^3=8 2^2=4 2^1=2 2^0=1
4 0 1 1 0
6 0 1 1 0
10 1 0 0 0
8 1 0 0 0

如此进行下去,游戏人最终会取得胜利。

NIM游戏策略的更多相关文章

  1. POJ 1704 Georgia and Bob (Nim游戏变形)

    题目:http://poj.org/problem?id=1704 思路:Nim游戏策略,做如下转换,如果N是偶数,则两两配对,将两个数之间的格子数(距离)看做成这一堆石头的数量. 如果N是奇数,则将 ...

  2. BZOJ 3105 [CQOI2013]新Nim游戏 ——线性基

    [题目分析] 神奇的题目,两人都可以第一次取走足够多堆的石子. nim游戏的规则是,如果异或和为0,那么就先手必输,否则先手有必胜策略. 所以只需要剩下一群异或和为0就可以了. 先排序,线性基扫一遍即 ...

  3. 编程之美----NIM游戏

    : 博弈游戏·Nim游戏 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 今天我们要认识一对新朋友,Alice与Bob.Alice与Bob总是在进行各种各样的比试,今天他 ...

  4. Nim游戏变种——取纽扣游戏

    (2017腾讯实习生校招笔试题)Calvin和David正在玩取纽扣游戏,桌上一共有16个纽扣,两人轮流来取纽扣,每人每次可以选择取1个或3个或6个(不允许不取),谁取完最后的纽扣谁赢.Cavin和D ...

  5. 【bzoj3150】 cqoi2013—新Nim游戏

    www.lydsy.com/JudgeOnline/problem.php?id=3105 (题目链接) 题意 在第一个回合中,第一个游戏者可以直接拿走若干个整堆的火柴.可以一堆都不拿,但不可以全部拿 ...

  6. (转载)Nim游戏博弈(收集完全版)

    Nim游戏的概述: 还记得这个游戏吗?给出n列珍珠,两人轮流取珍珠,每次在某一列中取至少1颗珍珠,但不能在两列中取.最后拿光珍珠的人输.后来,在一份资料上看到,这种游戏称为“拈(Nim)”.据说,它源 ...

  7. Nim游戏(组合游戏Combinatorial Games)

    http://baike.baidu.com/view/1101962.htm?fr=aladdin Nim游戏是博弈论中最经典的模型(之一),它又有着十分简单的规则和无比优美的结论 Nim游戏是组合 ...

  8. Nim游戏博弈

    Nim游戏的概述: 还记得这个游戏吗? 给出n列珍珠,两人轮流取珍珠,每次在某一列中取至少1颗珍珠,但不能在两列中取.最后拿光珍珠的人输. 后来,在一份资料上看到,这种游戏称为"拈(Nim) ...

  9. BZOJ 1874 取石子游戏 (NIM游戏)

    题解:简单的NIM游戏,直接计算SG函数,至于找先手策略则按字典序异或掉,去除石子后再异或判断,若可行则直接输出. #include <cstdio> const int N=1005; ...

随机推荐

  1. 使用Bundle在Activity间传递数据

    使用Bundle在Activity间传递数据 源Activity public class SourceActivty extends Activity { private Intent intent ...

  2. POJ 1511 Invitation Cards(单源最短路,优先队列优化的Dijkstra)

    Invitation Cards Time Limit: 8000MS   Memory Limit: 262144K Total Submissions: 16178   Accepted: 526 ...

  3. 深入分析GCC 与 编绎系统透视

  4. How To Use NSOperations and NSOperationQueues

    Update 10/7/14: This tutorial has now been updated for iOS 8 and Swift; check it out! Everyone has h ...

  5. 彻底解决DZ大附件上传问题

    个. 注意:很多人遇到修改php.ini后重应WEB服务后仍然不能生效.这种情况应该先确认一下所改的php.ini是不是当前PHP所使用的.您可以在WEB目录下建立一个php文件,内容很简单就一句话& ...

  6. python核心编程学习记录之Web编程

    cgi未完待续

  7. 查看HttpSession中存放了哪些值

    今天遇到了一个小问题,就是查看HttpSession中都存放了哪些值.解决办法如下: HttpSession session = request.getSession(); for ( Enumera ...

  8. 【原创】SpringBoot & SpringCloud 快速入门学习笔记(完整示例)

    [原创]SpringBoot & SpringCloud 快速入门学习笔记(完整示例) 1月前在系统的学习SpringBoot和SpringCloud,同时整理了快速入门示例,方便能针对每个知 ...

  9. IDEA如何打包可运行jar的一个问题

    转载:http://bglmmz.iteye.com/blog/2058785 背景: 有时候,我们会用IDEA来开发一些小工具,需要打成可运行的JAR包:或者某些项目不是WEB应用,纯粹是后台应用, ...

  10. 最新iOS发布App Store详细图文教程~

    网上有很多关于iOS发布上架的教程,但大多比较旧而且不完整.不够清晰.所以整理了一个详细完整的iOS APP发布上架App Store的图文教程.分享给小白到大神路上前进的你我. 上架iOS需要一个苹 ...