zoukankan      html  css  js  c++  java
  • 学习笔记 威佐夫博弈

    威佐夫博弈

    有两堆石子,两个顶尖聪明的人在玩游戏,
    
    每次每个人可以从任意一堆石子中取任意多的石子
    
    或者从两堆石子中取同样多的石子,不能取得人输
    

    分析谁会获得胜利

    不想听的的话直接看结论

    与前两种博弈不同的是 不可以将两堆石子 分开计算

    所以类似需要一个扩展的二维SG

    我们定义先手必输的局势就是奇异局势

    第一个奇异局势就是((0,0))

    ((x,y)=(y,x))等价

    考虑递推的思想

    从直角坐标系考虑$ (0,0)$是奇异局势

    那么((0,k),(k,0),(k,k))都是非奇异局势 把TA们划去

    再去寻找第一个没有被划过的点 $ (1,2)(2,1) $

    同理处理出((3,5),(4,7),(6,10))

    威佐夫博弈

    通过大眼观察法 我们find

    对于第k个奇异局势$(a_k,b_k)(a_k<b_k) $

    1.(a_k)是之前未出现的最小自然数

    2.(b_k=a_k+k)


    根据我们需找奇异局势的方法 可以证明定理1

    使用GH的数学归纳法证明定理2

    假定((a_k,a_k+k))是第k个奇异局势

    仅需证明((a_{k+1},a_{k+1}+k+1))((k+1))个奇异局势

    ((a_{k+1},a_{k+1}+k+1))

    1.左边取一点

    因为(a_i<a_{k+1}(i<k+1) a_i)之前已经出现过

    所以左边少了那就把右边拿成对应的情况

    2.右边取一点

    取得比较少的时候 两队之间差值减小 成为((a_{k+1},a_{k+1}+m))

    那么我们就拿成((a_m,a_m+m))

    取得比较多的时候 右边<左边

    那么右边就是之前出现过的一个(a_i(i<(k+1)))

    又因为(a_i+i=b_i<a_{k+1}) 所以可行

    那么左边取成类似的情况

    3.两边同时取

    (a_m,a_m+k+1)因为((k+1)>m) 所以取成$(a_m,a_m+m) $

    如上我们可以发现

    任意情况下奇异局势都会成为非奇异局势

    非奇异局势总是能够成为奇异局势

    所以

    奇异局势对应必败态

    非奇异局势对应必胜态

    那么我们仅需要计算出当前

    ((x,y)(x<y) x)所位于第几个奇异局势

    这需要运用到Beatty数列和Beatty定理 不加详述

    (a_k=frac {sqrt{5}+1}{2}*k)

    $b_k=a_k+k $

    有兴趣者自行查看

    例题

    HDU1527

    51NOD 1185

  • 相关阅读:
    递归汉诺塔问题
    递归求数组最大的那个数
    递归
    Overriding the Virtual Mechanism
    Shell中while循环的done 后接一个重定向<
    [转]【网络协议】TCP分段与UDP/IP分片 (MTU最大传输单元,MSS最大分段大小)
    vs2013一点事情
    深入理解JS中的变量作用域
    速效救心丸之django post 403
    速效救心丸之read
  • 原文地址:https://www.cnblogs.com/LovToLZX/p/13757934.html
Copyright © 2011-2022 走看看