博弈论入门

0x00-前(che)言(dan)

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

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

0x01-Bash Game

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

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

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

0x02 Nim Gmae

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

在洛谷上查看
洛谷上的难度:+/
问题是这样的:
N 堆石子,每堆的数量分别为 ai(1iN) ,每个人从同一堆石子里面取任意数目的石子,取到最后一个的人赢,请问是否存在先手必胜策略。
结论如下:当 a1a2a3aN0 的时候,先手存在必胜策略。
不难得出必胜策略如下:
首先在去一些石子,使 a1a2a3aN=0 ,然后反复进行就可以了,最后当 a1=a2=a3==aN=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

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

0x04 后记

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

posted @   jiangtaizhe001  阅读(614)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示