博弈论讲解
简单图上博弈
博弈树
其实就是记录你每一步决策的状态。
比如:
5 个石子,Alice 和 Bob 轮流取,每次取 1 到 2 颗,取到最后一颗的入人胜,Alice 先手问她的必胜决策。
5 Start | \ 4 3 Alice | \ \ \ 3 2-+ 2-+ 1 Bob | \ \ \ \ \ \ 2 1 1 0 1 0 0 Alice |\ \ \ \ 1 0 0 0 0 Bob | 0 A其中旁边的字母代表现在轮到了谁,数字表示当前还剩几颗,这就差不多是博弈树。
然后求答案就从出边为 0 的开始计算,有点类似 Topo 排序。
题目
P4096
P7135
这里我认为第二道题不那么像模板题,第一道题就是模板题,因此我讲第二道:
P7135
这是我做的第一道交互题,只不过它也不是很难。
如果你发现的仔细的话,你就可以填出一个幻方(这里不展示),包含这几个数字,每一行、每一列、每一条对角线都是 15,因此我们发现这不就是井字棋吗?
于是直接建出博弈树就做完了。
如果你玩过井字棋的的话,你也可以直接写程序暴力和交互库下棋。
code:
不好意思的是我是直接和他下棋并没有建博弈树。
提示:先手下角(网上有说为什么),后手堵桥(就把交互库第一步下的位置直接提前每个出一套对策直接干)。
有向图博弈
这玩意很好做,博弈方式直接建出树,只不过有可能有两个父节点同时拥有同一个子节点(继父???),只不过这问题也不大(父母离异问题还不大?孩子心理会有问题)。
划掉的部分是我同学说的,但我想回一句:
你是不知道红黑树是吧?孙子的孙子秒变爷爷的爷爷!!!
这是数据结构和家谱没有问题。
但是,DAG只存在于有向无环图,有环怎么办???(啥?孙子结婚生了爷爷???(见过基环树吗?也有环))
没关系,我们可以发现,只要这种情况出现了,肯定平局,不然跳出这个环外的人就输了!!!
题目
CF786A
P6560
P9169
都是模板题,没必要讲。
公平组合游戏(Nim 游戏)
博弈论部分由于以思维为主,很少作为一个知识点用来考察。但以nim 游戏为代表的公平组合游戏,是一个很容易考场的知识点。
公平博弈(impartial game)指满足如下条件的组合博弈:
在任意确定状态下,所有参与者可选择的行动完全相同,仅取决于当前状态,与身份无关;
博弈中的同一个状态不可能多次抵达,博弈以参与者无法行动为结束,且博弈一定会在有限步后以
非平局结束。
nim 游戏:有堆石子,第
堆石子有
颗石头,先后手轮流操作,每次可以选择一堆石子,然后从中选大于 0 个石头扔掉。谁在操作后场上所有石头清空,谁获胜。
所有的公平组合游戏,都可以转化 为nim 游戏。
我们直接给出结论:一个状态为先手必败,当且仅当所有石子的异或和为 0。
证明是这样的:不妨把上述状态称为必败。显然,当时,这就是一个必败态。
现在对于任意一个非必败态,可以证明一定存在一种操作方案,使得一次操作之后转化为必败态,
且对于一个必败态,操作一次必然成为一个非必败态,因此证明完毕。
于是我们可以线性复杂度判断一局 nim 游戏的状态了。
这个理论可以把所有的公平组合游戏转化为nim 游戏。
首先公平组合游戏有很多不同的“局”,比如nim 游戏中,就有局游戏,每一局游戏都是一堆石子,
虽然单堆石子很简单,但是它也可以看做一张有向无环图博弈:连边
为必败点。
而所有的“局”都是一张有向无环图。
我们定义图上一个点的函数值为所有它可以到达的点的
值的 mex。且必败态的
值为 0。
把所有游戏起点的异或起来,不为 0 则为必胜态。
knim 游戏,与 nim 游戏的区别在于每次可以至多拿堆石子。
阶梯nim,每次可以在一堆里面选出大于 0 个石子,然后放到下一堆,特殊的,对于第一堆选出来
的石子会直接扔掉。
树上nim,选出来的石子放到父节点上,根上的直接扔掉。
树上博弈,给你若干个有根森林,每次删掉一颗子树(根不能删),谁不能操作谁输。
题目
听懂了就会做,因为都是模板题:
P2148
P2575
P6639
P13114
此处不讲题,如果实在要我讲,我会另出一篇文章讲,要讲在评论区说。
后记
反正你在考场上遇到这类题,要不是思维题,要不是模板题,都不是就想想其他做法吧。
如果你想再做点这类题的话可以尝试做这道题。
这道题和 P7135 一样也是比较有意思的题目,可以好好想一想,也提升了能力(你水了一道黑题!!!巨佬爆切黑题!!!巨~~~膜拜~~~)。
对了,你们想不想看 DEVC++ 的神秘用法,想看在评论区里说。