• 博弈论专题


    模仿操作:

    核心: 使自己的局面一直满足一个性质使它是必胜局面,即寻找平衡状态,中止状态一定满足平衡状态。
    (1.)满足至少或至多一堆或几堆在模意义下是(××)。(与对手的影响和是(××)
    Vijos1196 [上下]
    (2.)满足一堆或几堆或堆之间的奇偶性关系是(××)。(跟着对手做)
    HDU1079 [中上]
    POJ1740 [上下]
    (3.)构造出一个局面,可以完全跟着对方做。
    POJ2484 [上下]

    Sg函数:

    核心: 递归搜寻Sg函数。
    (1.)并加入题目性质来优化寻找过程。
    POJ2234 [下中](sg函数等于个数)
    (2.)记忆化搜索sg函数+剪枝。
    POJ2960 [中下]
    luogu 3235 [上上]
    (3.)多局面博弈问题,sg异或值不为0则能赢。
    POJ2425 [中中]多局面指各个等价的状态之间互不影响
    BZOJ1299[上中]
    luogu3185 [上上]类阶梯游戏横着看变成nim游戏(惊了!)

    博弈+dp:

    核心: 用dp状态存是否能赢,实质上是搜索的优化。
    POJ2068 [中中]
    luogu2490 [上上]

    找规律:

    核心:手模小数据。
    POJ2505 [上下]
    BZOJ2463 [下上]

    常见技巧:

    (1.)关于(dp)数组下标建立坐标系,发现单调性或者关于对角线相等等性质。
    小题题
    (2.)找等价问题转换(典型:阶梯游戏)
    AGC 002 E
    CF794E
    (3.)平等博弈->等价转换->打表(sg)找规律。
    (4.)找规律:二进制(0/1)个数,最高低位(1),最小/大质因子编号,lowbit,(mod)某数的余数,循环节(可能起初几项不满足)用记事本骚操作。
    (5.)(sg)函数:dfs,递推,bitset找mexCF1091H,线段树动态维护。
    附:bitset找sg(sg比较小的时候)我们维护(B[i][j])表示所有已处理的状态是否有(sg)(i)的向状态(j)的转移。令(u[k])表示是否可以取(k)个。(B[i])(u)均用(bitset)存储,则SG函数的计算以及可以如下方式维护:

    	B[0] = u;
    	for (int i = 1; i <= 200000; ++ i){
            for (SG[i] = 0; B[SG[i]][i]; ++ SG[i]);
        	B[SG[i]] |= u<<i;
    	}
    

    (6.)一种状态比另一种状态给自己的当前选择的余地更大,那么若另一种必胜,这一种也必胜,所以可能存在单调性,单调性优化,问题转化成一点。
    (7.)大力猜平衡状态。
    (8.)区间(mex):主席树/离线,按(r)排序,然后搞一个权值线段树记一下每个数出现的最右边的位置,找一个前缀使得(min>l)
    (9.)找每个人可以保证的的下限,下限和为总值,那么都只能拿到下限。CF388C+黑白染奇偶讨论AGC 026F
    (10.)大力分类讨论CF 1110 G

    分类:

    N阶nim: 先手必败当且仅当(a_1,a_2,a_3cdots a_m)的对应二进制位的一的个数和(mod~(N+1)=0)
    硬币游戏: 把每个位置的起初硬币当作该位置上的硬币个数是偶数还是奇数,取反相当于加一个新的这个位置上的硬币(奇偶性改变),因为每个位置的每个硬币都是独立的所以答案可以(sg)异或从而只与奇偶性有关。树上的例题
    K倍动态减法的神仙思路:点此进入
    阶梯游戏: 一堆物品,选相邻两个从右往左拿>=1个,不能拿就输了,从左往右从0开始标号,等价于奇数阶梯玩Nim[BZOJ1115 上下
    威佐夫博弈: 两堆物品,可以在一堆取任意或两堆取任意相同,不能取为输,设局面为((a_k,b_k)),枚举可得((1,2),(3,5),(4,7),(6,10),(8,13)cdots)(a_k)是之前未出现的最小正整数,(b_k=a_k+k),这是一个(beauty)数列,解得(a_kapprox lfloor1.618 imes k floor)
    (beatty)数列: 数列((a_i,b_i))递增,每个数只出现一次,递推公式是

    [a_i=alpha imes i,b_i=eta imes i,frac 1 alpha+frac 1 eta=1 ]

  • 相关阅读:
    结构层HTML + 表现层CSS
    移动端:项目实战
    移动端:开发技巧
    两个对象数组,把其中相同的name的before相加,不同的对象添加到数组里
    js中遍历数组和遍历对象
    css学习笔记一
    Angular2父子组件数据传递之@ViewChild获取子组件详解
    css知识点总结
    js中的apply,call,arguments,callee,caller详解
    javascript中的排序
  • 原文地址:https://www.cnblogs.com/Smeow/p/10582539.html
Copyright © 2020-2023  润新知