考虑一个简单的游戏:

有两个盒子,其中一个装有m颗糖、另一个装有n颗糖,将这样的状态记为(m,n)。每次的移动是将其中一个盒子清空,把另一个盒子的一些糖拿到被清空的盒子里使得两个盒子至少各有一颗糖。两个操作者轮流进行操作,不能操作者败。需要判断一个状态是否先手必败。

按照k=m+n从小到大的顺序进行判断即可。

 1 #include <cstdio>
 2 // Ferguson,打印先手必败状态。
 3 const int maxn = 100;
 4 int winning[maxn][maxn]; // 1为先手必胜、0为先手必败
 5 int main(){
 6     winning[1][1] = false; // (1,1)是游戏的唯一终态,此时先手必败
 7     for(int k = 3 ; k < 20 ; k++) // k = n + m
 8         for(int n = 1 ; n < k ; n++){
 9             int m = k - n;
10             winning[n][m] = false;
11             for(int i = 1 ; i < n ; i++) // 如果之后的存在一个状态是先手必败的
12                 if(!winning[i][n - i]) winning[n][m] = true;
13             for(int i = 1 ; i < m ; i++)
14                 if(!winning[i][m - i]) winning[n][m] = true;
15             if(n <= m && !winning[n][m])
16                 printf("%d %d\n",n,m);
17         }
18     return 0;
19 }

转载于:https://www.cnblogs.com/cyb123456/p/5812773.html

Ferguson游戏相关推荐

  1. [算法] 2-4 组合游戏

      1.Nim游戏:有3堆火柴,分别为a,b,c根,记为状态(a,b,c).每次一个游戏者可以从任意一堆中拿走至少一根火柴,也可以整堆拿走,但不能从多堆火柴中同时拿走.无法拿火柴的游戏者输.   2. ...

  2. ACM常见组合博弈游戏

    这两天认识了几个组合游戏的基础模型,希望自己能更新下去.. Ferguson游戏 Description Initial 有两个盒子,一个装有 m 颗糖,一个装有 n 颗糖,表示为 (m, n) . ...

  3. 【博弈】 各种博弈的搬运整理

    这两天认识了几个组合游戏的基础模型,希望自己能更新下去.. Ferguson游戏 Description Initial 有两个盒子,一个装有 m 颗糖,一个装有 n 颗糖,表示为 (m, n) . ...

  4. 2020ACM俱乐部后备营个人训练赛第七、八、九场

    第七场 问题 B: 数字塔 思路 简单的递推 例如: a1 a2 a3 ( a1 + a2 ) % 10 = a3 如果我们已知 a3 , a2 求 a1 怎么求 因为数字都是 0 - 9 的,所以 ...

  5. 博弈论与 sg 函数

    博弈论 定义 必胜状态 为 先手必胜的状态 , 必败状态 为 先手必败的状态 . 通过推理,我们可以得出下面三条定理: 定理 1:没有后继状态的状态是必败状态. 定理 2:一个状态是必胜状态当且仅当存 ...

  6. ferguson博弈_组合博弈游戏

    ² 组合博弈游戏的概念和特点 ² 组合博弈游戏应满足以下性质: ² 1. 有两个游戏者. ² 2. 有一个可能的游戏状态集.这个状态集通常是有限的. ² 3. 游戏规则指定了在任何状态下双方的可能的走 ...

  7. 10个步骤:如何成为iPhone游戏开发者

    2019独角兽企业重金招聘Python工程师标准>>> 10个步骤:如何成为iPhone游戏开发者 译者:darrenest Neil Ferguson,是iPhone 游戏「病毒攻 ...

  8. Ferguson博弈

    清空/分割游戏也叫做Ferguson博弈. 进行游戏需要用到两个盒子,在游戏的开始,第一个盒子中有n枚石子,第二个盒子中有m个石子(n, m > 0).参与游戏的 两名玩家轮流执行这样的操作:清 ...

  9. 博弈论(一):Nim游戏

    从今天开始,我将会用一系列文章介绍博弈论(Game Theory)的基本知识,以OI中可能用得着的为主.当然,我对博弈论的理解还很肤浅,而且我写东西的风格向来都是"个人心得"而非& ...

最新文章

  1. 强烈安利!这个私藏已久的神器!
  2. 高速串行总线设计基础(五)揭秘SERDES高速面纱之多相数据提取电路与线路编码方案
  3. 蓝桥杯:基础练习 闰年判断
  4. Python: How to Sort a List
  5. python 分班_小白如何学习python
  6. vue项目使用webSocket前后端建立连接推送消息
  7. vue前期知识点笔记
  8. java 饥饿现象,Java单例模式、饥饿模式代码实例
  9. amazeui学习笔记--css(基本样式3)--文字排版Typography
  10. bullet HashMap 内存紧密的哈希表
  11. 演练 多班分数录入统计优秀人数
  12. 学习l1图做图像分析
  13. 国编是什么,需要什么条件,是什么流程?
  14. 嵌入式语音识别系统之电路设计原理
  15. 使用“npm init”初始化项目
  16. 使用sublime实现python代码补全
  17. 信息网络传播中的服务器标准,信息网络传播权的服务器标准与实质替代标准之争...
  18. 系统集成项目管理工程师计算题(案例计算题、挣值分析、EAC、ETC)
  19. 奇安信天擎卸载密码_【web安全】记奇安信“渗透测试”培训
  20. Keil 5报错error C216: subscript on non-array or too many dimensions

热门文章

  1. Oracle 11g RAC 第二节点root.sh执行失败后再次执行root.sh
  2. Beaglebone Back学习五(PWM测试)
  3. 网上找工作秘籍(3)
  4. php详解递归,PHP递归算法详解
  5. 3.运算符与表达式,控制流
  6. 联想服务器支持esxi版本,联想中国(Lenovo China)_服务频道_服务政策
  7. oracle 强制 断开,ORA-01092: ORACLE 例程终止 强行断开连接
  8. android webview webp,iOS WebView中使用webp格式图片的方法
  9. Python应用实战-Clumper | dplyr式的Python数据操作包
  10. 好的产品经理,应该有什么样的特质?