博弈论入门

0x00-前(che)言(dan)

博弈论在OI技能树上的标签是 \(\color{#9D3DCF}{提高/省选/NOI}\) 的,但是一些基础还是可能在初赛的问题求解考到的,(虽然主要考组合数学),但是早学晚学都得学

其实博弈论的精髓就在于一个转移迭代:
如果这种情况能有必胜策略,那么它一定能转移到一个有必胜策略的情况。 这就是一个递归迭代的问题,又㕛叒叕是DP。

0x01-Bash Game

Bash Game 应该是最简单的一种博弈论了,应该小学生都会的吧
内容如下:
有一堆石子,石子数量为 \(N\) 。一次可以取 \(x\) 个石子, 其中 \(a\le x \le b\) ,不可以不取,谁取到最后一颗就谁赢,给出 \(a,b,N\) ,求是否存在先手必胜的策略。

其实这个问题很简单,只要保证 \(N \mod \left( a+b \right) = 0\) 就没有,否则有,下面给出策略:

如果 \(N \mod \left( a+b \right) = 0\) 那么就后手取有必胜策略,我们发现,只要第一个人取 \(x\) 颗,我们就取 \(a+b-x\) 颗就可以了,这样一轮下来我们就有 \(a+b\) 颗石子被取走,那么就可以取到最后一颗了。并且对方无论怎么取你都可以让总数为 \(a+b\) 其他的数字就不可以了。
代码略。

0x02 Nim Gmae

这是一个非常经典的博弈论了,不过因为我太菜了所以我就只会过模板

在洛谷上查看
洛谷上的难度:\(\color{green}{普及+/提高}\)
问题是这样的:
\(N\) 堆石子,每堆的数量分别为 \(a_i \left( 1\le i\le N\right)\) ,每个人从同一堆石子里面取任意数目的石子,取到最后一个的人赢,请问是否存在先手必胜策略。
结论如下:当 \(a_1\oplus a_2\oplus a_3\dots a_N \not= 0\) 的时候,先手存在必胜策略。
不难得出必胜策略如下:
首先在去一些石子,使 \(a_1\oplus a_2\oplus a_3\dots a_N = 0\) ,然后反复进行就可以了,最后当 \(a_1= a_2=a_3=\dots =a_N = 0\) 的时候就胜利了,因为最后的结果的异或起来也是 \(0\)

0x03 Wythoff Game

这个应该是三个之中最难的了。
问题如下:
有两堆石子,可以在一堆石子中取任意个数的石子,也可以同时在两堆石子取相同个数的棋子,但不能不取,两对石子分别有 \(a\) 个和 \(b\) 个,问先手是否有必胜策略。

感觉找不出规律,俗话说得好:暴力出奇迹,打表出省一,那么我们手动模拟打张表吧。
这里令 \(a<b\) (因为 \(a=b\) 肯定是先手必胜)
然后我们就会发现基本上的结果是先手必胜,但是有少数例外:

\(a\) \(b\)
\(0\) \(0\)
\(1\) \(2\)
\(3\) \(5\)
\(4\) \(7\)
\(6\) \(10\)
\(8\) \(13\)
\(9\) \(15\)
\(11\) \(18\)

我们把这些结果称为 奇异局势 ,通过打表我们发现一个神奇的结论:
\(\lfloor 1.618a \rfloor=b\)\(1.618\) 其实就是 黄金分割比 \(+1\) 就是 \(1+\dfrac{\sqrt{5}-1}{2}\) ,而向下取整刚好可以使用我们C++的强制转型(int)
而Wythoff Game的精髓以及射你之处也就在这里了。

0x04 后记

当然,博弈论和其他算法一样,只有下限没有上线,像我这种蒟蒻怎么讲的动那些蓝紫黑博弈论呢? 所以遇到博弈论的时候要记住博弈论必胜策略转移的精髓:如果这种情况能有必胜策略,那么它一定能转移到一个有必胜策略的情况。
最后遇到不会的题目就可以 暴力出奇迹,打表出省一 来得到一定的分数。

posted @ 2021-02-15 22:00  jiangtaizhe001  阅读(556)  评论(0编辑  收藏  举报