math-2人博弈
问题描述:
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人博弈的更多相关文章
- POJ 1704 Georgia and Bob(阶梯博弈)题解
题意:有一个一维棋盘,有格子标号1,2,3,......有n个棋子放在一些格子上,两人博弈,只能将棋子向左移,不能和其他棋子重叠,也不能跨越其他棋子,不能超越边界,不能走的人输 思路:可以用阶梯博弈来 ...
- hdu1525 Euclid's Game , 基础博弈
http://acm.hdu.edu.cn/showproblem.php?pid=1525 题意: 两人博弈,给出两个数a和b, 较大数减去较小数的随意倍数.结果不能小于0,将两个数随意一个数减到0 ...
- 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 ...
- 【HDU】1846 Brave Game
http://acm.hdu.edu.cn/showproblem.php?pid=1846 题意:二人博弈,1堆石子每次取1~m个,没有石子可取的输,输出先手胜利还是后手胜利. #include & ...
- 每周一道数据结构(四)A*算法&博弈树α-β剪枝
A*算法/博弈树 前阵子考试学了A*算法.博弈树和回溯,自己真是愚蠢至极,根本没就搞明白这些,所以对于这些算法问道的话就不能说清楚,也记不住,所以才有了这篇笔记.在这里感谢面试我的那位工程师~~ A* ...
- A*算法&博弈树α-β剪枝
A*算法&博弈树α-β剪枝 A*算法/博弈树 前阵子考试学了A*算法.博弈树和回溯,自己真是愚蠢至极,根本没就搞明白这些,所以对于这些算法问道的话就不能说清楚,也记不住,所以才有了这篇笔记.在 ...
- 学习笔记TF051:生成式对抗网络
生成式对抗网络(gennerative adversarial network,GAN),谷歌2014年提出网络模型.灵感自二人博弈的零和博弈,目前最火的非监督深度学习.GAN之父,Ian J.Goo ...
- canvas 从初级到XX 2# 让我们在之前的基础之上,再迈进一步吧 [中级向] (上)
还是老样子,先啰嗦一点前言. 最近各种事务缠身,所以也就隔了比较长的时间才开始码这篇文.希望不会这么快就过气. 好了,接下来就开始码代码.(写到中途,突然感觉到的.本篇设计大量初中物理知识,请怀念的往 ...
- 浅谈博弈论中的两个基本模型——Bash Game&&Nim Game
最近在数学这一块搞了蛮多题目,已经解决了数论基础,线性代数(只有矩阵,行列式待坑),组合数学中的一些简单问题.所以接下来不可避免的对博弈论这一哲学大坑开工. 当然,由于我很菜,所以也只能从最基础最容易 ...
随机推荐
- C# 为所有 CheckBox 添加事件
C# 为 form 窗体中的所有相同组件循环添加相同事件,这样减少了代码量. private void Form2_Load(object sender, EventArgs e) { foreach ...
- [Python数据挖掘]第5章、挖掘建模(下)
四.关联规则 Apriori算法代码(被调函数部分没怎么看懂) from __future__ import print_function import pandas as pd #自定义连接函数,用 ...
- 使用grafana provisioning通过配置方式添加datasource和dashboard
grafana provisioning grafana provisioning (http://docs.grafana.org/administration/provisioning/#prov ...
- Hive性能优化上的一些总结
https://blog.csdn.net/mrlevo520/article/details/76339075 1.介绍 首先,我们来看看Hadoop的计算框架特性,在此特性下会衍生哪些问题? 数据 ...
- 论文笔记:Learning Attribute-Specific Representations for Visual Tracking
Learning Attribute-Specific Representations for Visual Tracking AAAI-2019 Paper:http://faculty.ucmer ...
- java扫描文件。
前言:一步一步来实现迷你ioc框架,前面的容器工厂也是一个铺垫,这次的扫描文件也是一个铺垫…… 需求:扫描当前项目下所有文件.包括文件夹下文件夹里面的文件.利用递归进行扫描 ScanFileUtil类 ...
- 近期wxss总结
最近有一些需要点击才能实现的样式切换,我用的方法有2种 1 wxml 中 对class给一个判断式 class="变量?变化后的类:变化前的类" 这样在js中设一个变量,我是设成布 ...
- SpringCloud问题解决:spring-cloud-eureka启动出错Cannot execute request on any known server
场景: 在启动eureka server时,出现以下错误: com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectExce ...
- 蓝牙 - 小米手环3 NFC版BLE协议研究
0x01 前言 最近买到了小米手环3nfc版本,基本上实现了我对手环的所有功能需求,高中的时候就缠线圈做过戒指一卡通,但是缺陷是不好看,而且只能储存一张卡,等 手环3nfc版我认为比较好的功能 可以储 ...
- MAVEN中的Scope
Dependency Scope 在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署.目前<scope>可以使用6个值: *im ...