zoukankan      html  css  js  c++  java
  • 数学--博弈论--巴什博奕(Bash Game)

    终于也轮到我做游戏了,他们做了好几个月的游戏了。

    巴什博弈:

    两个人做游戏,取石子,一个人最多可以可以取M个,至少取1个,最后取完的赢。

    显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(≤m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1)个,以后保持这样的取法,那么先取者肯定获胜。总之,要保持给对手留下(m+1)的倍数,就能最后获胜。

    举例1:先手必胜(如果是傻子就好说了)

    终结数30 ,最大可以取3个,最少取1个

    经过上面的公式推算- 3+1=4(m+1)

    正常人:

    如果先手足够聪明,那么他一定会胜利,他可以保证每次留给你剩下的数都是4的倍数 取2留28,取6留24,取10留20,取14留16,取18留12,取22留8,取26留4,先手只要取到这些点必输。

    康宝斌:

    如过先手不够聪明,留给后手反击的机会,后者就可以通过先手的失误,先达到上面的点。

    总结 谁先给对手留(m+1)倍数的数,谁就先胜利

    一个人拿1~m个,那谁面对m+1的局势的的时候则必败。假设n=k*(m+1)+s,(k为任意,s<m+1),那我(先手)先把那个s个拿掉,然后让另一个人拿,从现在开始,只要我每次拿的个数与前面一个人拿的个数和等于m+1,这样后拿的必定面对必败局势,即到最后另一个人拿完后肯定是剩t(t<m)个给我,那就是我赢。

    举例2:先手必输

    我们考虑这种情况:

    终结数20 ,最大可以取3个,最少取1个。

    无论我去多少个,我不能留给我对手K*(M+1)个,这样的后果是,我会面对K*(M+1)的情况,也就是我必输。

    总结:

    那我们讨论一下什么时候必输,什么时候必赢。

    当我一开始就面对K*(M+1)的局势,相当于对面给我制造了K*(M+1)的局势,而我是先手。

    所以判断终止数%(M+1)=0?来判断先手必输,还是必赢。

  • 相关阅读:
    今日确定开源近两年来的EA程序
    升级了NinjaLoveFish Excel量化表格
    到家第一件事就是脱衣服
    对挑选完成的股票,进行批量建仓
    lua 学习之错误处理
    lua 学习之编译
    Lambda 演算入门
    lua学习之深入函数第二篇
    lua学习之深入函数第一篇
    lua学习之复习汇总篇
  • 原文地址:https://www.cnblogs.com/lunatic-talent/p/12798560.html
Copyright © 2011-2022 走看看