[hdu1848] Fibonacci again and again

题目链接

sg函数

sg函数入门题

sg函数定义, 设sg(x)为状态x的sg函数, sg(x)>0则代表x这个状态是必赢点, 若sg(x)=0则代表x这个状态是必败点

sg函数性质, sg(x)=mex{sg(y)} y为x可达的状态点

观察定义就可以知道, 一个点为必胜点当且仅当这个点存在一个可达的状态点都是必败点, 一个点为必败点, 当且仅当所有可达点都是必胜点

根据这个定义可以知道, 为什么sg(x)=0就是必败点(因为所有可达点都是必胜点), 为什么sg(x)>0代表x这个状态是必胜点, 因为可达点的集合中有至少一个必败点

 sg定理

更深入的, 有个sg定理, 他能解决组合游戏的并(比如nim游戏)

其表示为, 总状态的sg函数为各个互相独立的子状态的sg函数的异或和

举个例子, 取石子游戏, 一共有n堆石子, 这n堆石子是互相独立的, 那么全部石子的sg函数就是$sg(x_1) \ xor \ sg(x_2)\  ...\  xor \ sg(x_n)$

因为在这一题中, sg(x)=x, 所以最终nim游戏的结论就是$x_1\  xor\  x_2\  xor ...xor \ x_n$

本题题解

对于这道题, 对于一堆石子的$sg(x) = mex{sg(x-f[i])| f[i]\leq x}$

所以对于三堆石子, 只需要把状态异或起来就可以了, 而sg函数可以记忆化搜索求

还是比较好写的

学习链接

  博弈论进阶之SG函数 - 自为风月马前卒 - 博客园 (cnblogs.com)

  老刘の组合博弈课件

原文地址:https://www.cnblogs.com/gllonkxc/p/15627110.html