博弈论专题
模仿操作:
核心: 使自己的局面一直满足一个性质使它是必胜局面,即寻找平衡状态,中止状态一定满足平衡状态。
\(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_3\cdots 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_k\approx \lfloor1.618\times k\rfloor\)。
\(beatty\)数列: 数列\((a_i,b_i)\)递增,每个数只出现一次,递推公式是