问题描述:

  100根火柴,2人轮流取,每人每次只能取1-7根,取走最后一根火柴的人获胜。问有没有一种策略肯定能够获胜?该策略具体:先取or后取,怎么取?

思维过程:

  step1:题目问的很明显,所以肯定是有一种方法能够获胜的,因为自己读题时对“先取还是后取”字眼比较关注,且由于先取,不能保证另一方取完后的数量,所以假设为后取(这个假设算是一个坑吧)

  step2:问题肯定存在某种规律,我认为是2人每一回合取的火柴数。2人轮流取,后取的肯定能够保证这一轮总数为8,>8的数是不可能的了。

  step3:每一回合按照step2中的这样取,最后还剩4根。当时自己怎么都绕不过来这四根应该怎么办,然后就开始动摇是不是不应该每次使得总和为8,如果不保持这个数的话,取的数就会乱套,也不行(PS:愣是没有想到推翻假设)

  step4:实在不行了,就开始从结局开始往前推,假设2人都是明白道理的话,最后一局肯定是8根,再往前推一局,推推推……发现不行啊,100根太多了。就以10根为例推,还是有点乱。

  step5:最后还是觉得之前保持8根的想法是对的,就从100根倒着减8,减了几次,恍然大悟,可以先取4根,后面就能够保持平衡了……  

结果:

  先取,第一次取4根,后面只要与另一个人在同一回合相加为8就ok.

  (不过刚刚又想到其实后取也是可以的,只要在中途多取几根,多取的总数为4也行,(如果前面的人永远取1根,那第一轮的时候取3根也能凑4)hahha,这个解决方法是刚刚写的时候想到的!)

总结:

  要记得自己假设了什么,有时候推翻假设是关键

——————————————————————————————————————————————————————————————

推广:

  有两堆水果,数量分别为m,n。2人轮流取,每次只能在一堆水果中取,每次可以取1~这堆水果的总量。取走最后一个水果的人获胜。问:同上。

思维过程:

  step1:假设每次都尽可能赢,最后一局的时候,结果为2堆各剩余1个。那么就可以把两堆分成4堆,即两堆中的1个不拿,问题可以转换为谁正好拿完剩余的那些,那么他就是赢的。转化后的问题跟原问题一样了,即两堆中的2个不拿,谁拿完剩余的那些,那么他就是赢家。如果一直往前推的话,到第三次转换的时候就出现问题了,即剩余3个不拿,谁拿完剩余的那些,谁就是赢家(我是到这一步才明白不能递推)。因为他可以直接拿到只剩一个,所以这种每堆只剩3个的情况可以是不存在的。综上,只有两堆都只剩1个,这种情况才是肯定会存在的(在第一句假设上)。(找确定情况)

  step2:往后递推的方式不行,就考虑了此题与上一题的区别,很明显的一点就是,拿的个数放宽了,所以每次拿完之后情况复杂,不能看出规律来。

  step3:这时候,我采用了特例的方法,假设每次每个人只拿一个,分析先拿和后拿的情况,发现跟m+n的奇偶性有关。但是推翻这个假设又想不通了。又将个数实例化,且去比较小的值,但是情况也是乱七八糟的。然后就放弃这个方法了。

  step4:直觉上觉得应该还是应该从后面固定的局面(即两堆各剩下1个)往前推。感觉也是有点漫无目的想。可以说是自己模拟情况,也没有什么进展。

  step5:然后在睡觉前又想了一会,又有点跳回到step1中的想法,后来猛然惊醒,忽然想每次只要跟对方拿的一样就行了啊。然后有修正了一下,感觉只要每一回合之后,两堆剩余的个数一样就可以了,只要谁能够在其这一次拿完之后使得两堆剩余一样就可以了。考虑先拿后拿的问题,由于上一题的经验,可以说先后其实是相对的,所以觉得先后无关,但是仔细想想就发现,m≠n是,为了保证能够获胜,先拿使得两堆数量相同,才能自己赢,因为如果后拿,先拿的人知道这个规律,那么你是不可能使得两堆相等的。(感觉“忽然顿悟”这一点实在是难以琢磨,不知道为何自己忽然就知道了,不过现在想想,可能也跟step1中的递推有关系,因为当时就发现如果这样下去,每次两堆剩下的数量都是一样的。这应该也算是线索之一吧)

结果:

  先拿,每次拿完之后只要保证两堆数量相等即可。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 总结:

  虽然题目看上去差不多,中间也用了一些相同的办法去做,但是感觉到第一问题还是有迹可循的,第二问题就有点靠联想而不是推理或者是逻辑演练了。

  相同点:思路都是从题目中反推出结果成立需要满足的情况,再由这个确定的情况出发,联想或者推理。

  不同点:问1规律明显,问2规律不明显(甚至我都觉得自己找不到规律啊)

math-2人博弈的更多相关文章

  1. POJ 1704 Georgia and Bob(阶梯博弈)题解

    题意:有一个一维棋盘,有格子标号1,2,3,......有n个棋子放在一些格子上,两人博弈,只能将棋子向左移,不能和其他棋子重叠,也不能跨越其他棋子,不能超越边界,不能走的人输 思路:可以用阶梯博弈来 ...

  2. hdu1525 Euclid's Game , 基础博弈

    http://acm.hdu.edu.cn/showproblem.php?pid=1525 题意: 两人博弈,给出两个数a和b, 较大数减去较小数的随意倍数.结果不能小于0,将两个数随意一个数减到0 ...

  3. Educational Codeforces Round 68 (Rated for Div. 2) D. 1-2-K Game (博弈, sg函数,规律)

    D. 1-2-K Game time limit per test2 seconds memory limit per test256 megabytes inputstandard input ou ...

  4. 【HDU】1846 Brave Game

    http://acm.hdu.edu.cn/showproblem.php?pid=1846 题意:二人博弈,1堆石子每次取1~m个,没有石子可取的输,输出先手胜利还是后手胜利. #include & ...

  5. 每周一道数据结构(四)A*算法&博弈树α-β剪枝

    A*算法/博弈树 前阵子考试学了A*算法.博弈树和回溯,自己真是愚蠢至极,根本没就搞明白这些,所以对于这些算法问道的话就不能说清楚,也记不住,所以才有了这篇笔记.在这里感谢面试我的那位工程师~~ A* ...

  6. A*算法&博弈树α-β剪枝

    A*算法&博弈树α-β剪枝 A*算法/博弈树 前阵子考试学了A*算法.博弈树和回溯,自己真是愚蠢至极,根本没就搞明白这些,所以对于这些算法问道的话就不能说清楚,也记不住,所以才有了这篇笔记.在 ...

  7. 学习笔记TF051:生成式对抗网络

    生成式对抗网络(gennerative adversarial network,GAN),谷歌2014年提出网络模型.灵感自二人博弈的零和博弈,目前最火的非监督深度学习.GAN之父,Ian J.Goo ...

  8. canvas 从初级到XX 2# 让我们在之前的基础之上,再迈进一步吧 [中级向] (上)

    还是老样子,先啰嗦一点前言. 最近各种事务缠身,所以也就隔了比较长的时间才开始码这篇文.希望不会这么快就过气. 好了,接下来就开始码代码.(写到中途,突然感觉到的.本篇设计大量初中物理知识,请怀念的往 ...

  9. 浅谈博弈论中的两个基本模型——Bash Game&&Nim Game

    最近在数学这一块搞了蛮多题目,已经解决了数论基础,线性代数(只有矩阵,行列式待坑),组合数学中的一些简单问题.所以接下来不可避免的对博弈论这一哲学大坑开工. 当然,由于我很菜,所以也只能从最基础最容易 ...

随机推荐

  1. MySql 8.0 C#连接报错 MySql.Data.MySqlClient.MySqlException (0x80004005): Authentication to host '12.118.224.181' for user 'root' using method 'caching_sha2_password' failed with message: Reading from t

    解决方法 在连接字符串后面加上   SslMode=None 

  2. 解决Win10 PowerShell无法激活Anaconda环境的问题

    最近在使用Anaconda的过程中,发现在Win10的PowerShell在使用conda activate 环境名激活环境时无效,而CMD则可以.这里前提必须将Anaconda 写入环境变量.否则在 ...

  3. 解决 Cannot get IBus daemon address 问题

    参考: Cannot get IBus daemon address 解决 Cannot get IBus daemon address 问题 在 Ubuntu 14.04 系统下使用 TexMake ...

  4. 20165306 Exp1 PC平台逆向破解

    20165306 Exp1 PC平台逆向破解 一.逆向及Bof基础实践说明 1. 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,fo ...

  5. 小程序modal解决

    data{ shareDialog:false, } <cover-view wx:if="{{shareDialog}}" class="list_tab&quo ...

  6. [转载] 修改linux终端用户名的颜色

    此文章为转载,来源:https://blog.csdn.net/vactivx/article/details/62219349,目的是怕以后他博客打不开,文章就没了.存个档. 这个基本都需要手动修改 ...

  7. mysql 通过测试'for update',深入了解行锁、表锁、索引

    mysql 通过测试'for update',深入了解行锁.表锁.索引 条件 FOR UPDATE 仅适用于InnoDB存储引擎,且必须在事务区块(BEGIN/COMMIT)中才能生效. mysql默 ...

  8. 出错:(unicode error) 'unicodeescape' codec can't decode bytes in position 8-9: malformed \N character escape

    报错原因:python 中 \N 是换行的意思.这里要把 N 前面的 \ 转义一下.用  \\  代替即可. Nokia_mac = np.loadtxt('data\oui\\NokiaMac201 ...

  9. [Basics] 递归

    Recursion就是方法调用自己,递归其实和循环是非常像的,循环都可以改写成递归,递归未必能改写成循环,这是一个充分不必要的条件.

  10. vue使用webapck的最基本最简单的开发环境配置

    这个配置生成出来的代码只能支持ES6的浏览器下正常显示. npm init -y npm install vue-loader vue-template-compiler vue-style-load ...