博弈论专题

模仿操作:

核心: 使自己的局面一直满足一个性质使它是必胜局面,即寻找平衡状态,中止状态一定满足平衡状态。
(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 ]

原文地址:https://www.cnblogs.com/Smeow/p/10582539.html