博弈论简单入门sb总结

博弈论简单入门sb总结


下午讲博弈论。没预习,GG。

整个下午都在学。

0

有一堆共n个石子,两个人轮流取石子,每个人一次可以取1到k个,取到最后一个石子的人胜利。

小学生都会的sb题。若k+1|n,后手必胜。否则先手必胜。

如果k+1|n,先手第一次取了a个的话,后手取k+1-a个就星了。最后先手GG

否则先手一开始取n%(k+1)个,再按照上面的方法来玩。

1

有n堆石子,每堆a[i]个,两个人轮流取石子,每个人一次可以从一堆中取任意多个,取到最后一个石子的人胜利。

引入一个叫SG函数的东西。(好吧那叫SG

直接蒯了:

一个局面的SG为mex{后继局面的SG}。
mex运算为集合中没出现的最小的自然数。
几个局面的和的SG为它们的SG的异或和。
SG不为0时先手必胜,SG为0时后手必胜。

mdzz不

然后就很好球了。

设SG(i)为一堆i个石子的SG值。

SG(0)=0
SG(1)=mex{SG(0)}=1
SG(2)=mex{SG(0),SG(1)}=2
...
SG(i)=mex{SG(0),SG(1),...,SG(i-1)}=i

归纳法可证明SG(i)=i

所以把每堆石子的个数xor起来,非0则先手胜,是0则后手胜。

2

有n堆石子,每堆a[i]个,两个人轮流取石子,每个人一次可以从一堆中取1到k个,取到最后一个石子的人胜利。

加了一个限制,实际上将每个a[i]都%=(k+1)就星了。

考虑感性证明,两个人互相取石子,一个人拿了x个,另一个人马上拿走k+1-x个。

然后还是异或。

3

有n堆石子,每堆a[i]个,两个人轮流取石子,每个人一次可以从至多m堆中取,每堆只能取1到k个,取到最后一个石子的人胜利。

首先啃腚可以a[i]%=k+1

emmmmm然后就很不爽了,这怎么做啊

考虑一下m=1的情况(2号情况)的方案

比如这几个SG值

01110110
10101011
10010100

xor起来是01001001

所以先手一开始取走01001001即可,然后后手取了什么数位,先手也跟着取什么数位

最后先手一定会取到所有都是00000000

写到这吧

做几道题再来(咕咕咕

posted @ 2018-03-28 20:10  菜狗xzz  阅读(370)  评论(0编辑  收藏  举报