博弈论入门
0x00-前(che)言(dan)
博弈论在OI技能树上的标签是 的,但是一些基础还是可能在初赛的问题求解考到的,(虽然主要考组合数学),但是早学晚学都得学
其实博弈论的精髓就在于一个转移迭代:
如果这种情况能有必胜策略,那么它一定能转移到一个有必胜策略的情况。 这就是一个递归迭代的问题,又㕛叒叕是DP。
0x01-Bash Game
Bash Game 应该是最简单的一种博弈论了,应该小学生都会的吧。
内容如下:
有一堆石子,石子数量为 。一次可以取 个石子, 其中 ,不可以不取,谁取到最后一颗就谁赢,给出 ,求是否存在先手必胜的策略。
其实这个问题很简单,只要保证 就没有,否则有,下面给出策略:
如果 那么就后手取有必胜策略,我们发现,只要第一个人取 颗,我们就取 颗就可以了,这样一轮下来我们就有 颗石子被取走,那么就可以取到最后一颗了。并且对方无论怎么取你都可以让总数为 其他的数字就不可以了。
代码略。
0x02 Nim Gmae
这是一个非常经典的博弈论了,不过因为我太菜了所以我就只会过模板。
在洛谷上查看
洛谷上的难度:
问题是这样的:
有 堆石子,每堆的数量分别为 ,每个人从同一堆石子里面取任意数目的石子,取到最后一个的人赢,请问是否存在先手必胜策略。
结论如下:当 的时候,先手存在必胜策略。
不难得出必胜策略如下:
首先在去一些石子,使 ,然后反复进行就可以了,最后当 的时候就胜利了,因为最后的结果的异或起来也是 。
0x03 Wythoff Game
这个应该是三个之中最难的了。
问题如下:
有两堆石子,可以在一堆石子中取任意个数的石子,也可以同时在两堆石子取相同个数的棋子,但不能不取,两对石子分别有 个和 个,问先手是否有必胜策略。
感觉找不出规律,俗话说得好:暴力出奇迹,打表出省一,那么我们手动模拟打张表吧。
这里令 (因为 肯定是先手必胜)
然后我们就会发现基本上的结果是先手必胜,但是有少数例外:
我们把这些结果称为 奇异局势 ,通过打表我们发现一个神奇的结论:
而 其实就是 黄金分割比 就是 ,而向下取整刚好可以使用我们C++
的强制转型(int)
而Wythoff Game的精髓以及射你之处也就在这里了。
0x04 后记
当然,博弈论和其他算法一样,只有下限没有上线,像我这种蒟蒻怎么讲的动那些蓝紫黑博弈论呢? 所以遇到博弈论的时候要记住博弈论必胜策略转移的精髓:如果这种情况能有必胜策略,那么它一定能转移到一个有必胜策略的情况。
最后遇到不会的题目就可以 暴力出奇迹,打表出省一 来得到一定的分数。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析