刷了差不多两星期的博弈啊(其实还用了很多时间准备坑爹的会考- -)
虽然不是特别熟悉 但是比之前看到博弈就orz好多了
把副队给的题目刷完之后AK表示还不过瘾 又去把wikioi&vijos的博弈题目都刷了一遍
里面好几道重复的题目我就没打了 看了下保存的文件 刷了19题
我看的论文:
《从“k倍动态减法游戏”出发探究一类组合游戏问题》
《组合游戏略述——浅谈SG游戏的若干拓展及变形》
还有这篇博客不错 讲了3种博弈问题 我威佐夫就是在这看的:
http://blog.csdn.net/liwen_7/article/details/7943210
Nim游戏:
给出N堆石子的个数 每个人可以从一堆中取若干个石子 不能取的人输 问先手是否必胜
这是博弈的一道最基础的题目 做博弈时有一句话特别重要:
能转移到必败态的状态就是必胜态 只能转移到必胜态的就是必败态
对这道题目 所有石子异或和为0的为必败态 否则为必胜态
因为首先没有石子的肯定是必败态 异或和为0
1.必胜态能转移到必败态
当前异或和不为0 设为k 设k的二进制表示为(xn xn-1 .. x2 x1)2 (xi∈{1,0}, xn=1)
可以证明必然存在ai二进制下第n位为1
则把ai这堆石头取到剩下ai^k 显然ai^k<ai这样取完后ai的异或和为0 为必败态
2.必败态只能转移到必胜态
当前异或和为0 又每次只能且必须改变一个ai
又ai对k的每一个二进制位只有1的影响改变后必然导致k≠0 为必胜态
得证
SG函数
定义mex运算 这是施加于一个集合的运算 表示最小的不属于这个集合的非负整数
一个状态的sg值就是mex(所有他能达到的状态的sg值)
显然一个状态没有状态能转移sg值为0
若sg值为x(x>0) 则说明我们能通过一步转移使得状态sg值变为0~x-1
这就和Nim游戏一样了
所以一个游戏的sg值就等于组成它的子游戏的sg异或和