• 博弈论 1.Introduction(组合游戏基本概念、对抗搜索、Bash游戏、Nim游戏)


    1.博弈

    博弈论是研究具有斗争或竞争性质现象的数学理论和方法。

    每个玩家都有一个偏好,A一般是希望A赢,如果不可以的话就倾向于 平局,B一般倾向B赢,达不到的话就倾向于平局。他们的每一步组成了一个“函数”,或者说是“映射”,即每一步操作都会对应一种结果,而每一步又都不是固定的,是根据上一步来产生......

     “一般的博弈游戏是非常复杂的,一般算不出答案,所以在算法考试中一般不考,考得多的是下面的‘组合游戏’”

    2.组合游戏(combinatorial game)

     组合游戏 给了限制,给问题做了简化

    “ 状态的转移” -> “有向无环图”

     Bash游戏

     0个石子为结束状态,0可以由1得来,可以由2得来,由3得来...4可以到达3,2,1.....。21为起点,这个可以在有限步内结束。

    Bash游戏是一个组合游戏

    讨论这个游戏的最优策略,以及在最优策略下谁会赢

    P N态

    注意上图的“性质”,与Bash游戏无关,所有的组合游戏都适用。

     

     浅解释:对于上图,玩家A到达0后玩家B就不能再取了,游戏结束(A胜),所以0为P态(A走到0,A胜);到达1的玩家,取走这一个石子后下一玩家到达0,则走下一步的玩家赢 该玩家败,1为N态;……能到P态的都是N态,我们称“当前玩家”从当前这个状态往下走的玩家,则P态:当前玩家输,N态:当前玩家赢。对于P态,无论怎么走都会输,所以就是最优策略了,而N态 要到达P态,使自己赢。

    P N态是我们分析博弈问题的一个最基础的工具。【一般都是倒推

    确定终态:正常规则与反常规则

     Bash游戏是正常规则,那么反常规则的Bash游戏呢?(照样倒着 “递推”)

     例题

    1.【hdu 1404】Digital Diletions

     2.【hdu 1079】Calendar Game

     所以一个非常重要的"万能"的方法就是: 打表(学会了打表,博弈题基本上就解决了一半)

    我们再回过头来看第一题,他不满足 组合游戏的定义(组合游戏不会有平局),但依然可以用其思想来解决,这里可以dp、递推,我们只关心那些“数对”(回文判定时的首尾呼应的数对)的个数,而它们具体在什么位置我们并不关心,“1-1”就可以不用管了,下图的f, 我们要记录“0-0”对的数量,“0-1”对的数量,0的个数,以及上一步是否进行了翻转操作....

    3.【cf 1527 B2】Paindrome Game

     

     4.小牛再战

    分析:

    (这里手动“打表”了先)N=0时,P态(正常规则);N=1时,可以全部取走,N态;

        N=2时,设这两堆:x1>=x2>0; 首先,显然(emogg说的,受伤了啊我),x1==x2 为P态,因为我们从x1取一部分走(放不放到x2都一样) 变成 y, x2 ,如果y=0, 那就进入N=1的N态了->此时x1==x2为P态;若y!=0, 第二个玩家总能将其变为相等的两堆:在x2那堆拿走(x2-y)个石子....也就是总与上个玩家“作对”,这样x1>x2就是N态。N=3时,是N态,设x1>=x2>=x3>0 ,那么从x1拿(x2-x3)个给x3(多的扔掉), 得到 0,x2, x2(P态); 我们是可以保证x1>(x2-x3)的(因为x1>=x2, x2>x2-x3啊)所以N=3为N态;

     结论:

    1.N是奇数->N态;

    2.N是偶数时,两两成对是P, 否则是N;

     

    证明:

    先全都排个序:x1>=x2>=x3>=...>=xn;

    N是奇数的时候,取最大的那个,分配到后面(全部=x2)x1 >( x2-x3)+(x4-x5)+(x6-x7).....+(X[n-1] - X[n]) 只要把后面括号顺序改一下就可以看出来了:x1 > x2 (- x3+x4) (-x5+x6) (-x7..)...( +X[n-1] ) - Xn; 括起来的都是小于0的,又x1>=x2 ....

    N是偶数的时候,两两成对为P态,不成对则可以一步变成两两成对的P态->为N态,详见下图吧。。

    5.【cf 1537 D】Deleting Divisors 

     

  • 相关阅读:
    详解一下java中字符串hashcode的具体计算
    Polygon Miden VM中的哈希函数对比
    Matplotlib库
    基于SSM+Vue的网络教学平台的设计与实现的设计与实现
    小趴菜教你如何用Python开发手机App..
    ZCMU--1431: Epic Game(C语言)
    机器学习案例(三):未来销售预测
    java处理高并发高负载类网站的优化方法
    [山东科技大学OJ]1176 Problem E: 数组去重
    服务端Skynet(一)——源码浅析
  • 原文地址:https://blog.csdn.net/m0_60523890/article/details/126014433