![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
博弈论
_lanChe
这个作者很懒,什么都没留下…
展开
-
ACM--博弈论入门--几种博弈游戏类型+题集
关于几种类型的详情,请跳转至该博客题集:C - Calendar GameD - GameE - Nim or not Nim?F - Coin GameG - Being a Good Boy in Spring Festival H - Incredible ChessI - A Multiplication GameJ - Crazy CalendarK - Game of Hyper KnightsL - Aladdin and the Game of BraceletsM原创 2021-02-10 18:27:33 · 531 阅读 · 0 评论 -
博弈论入门讲解
博弈论,即公平组合游戏,满足下列一些特征:一场游戏有两个玩家,两个玩家轮流行动,是经典的回合制游戏。两个玩家的移动按照规则移动,并且两玩家之间的移动不区分身份。两个玩家按照最优的决策行动,即给定一个局势,能够一开始就区分出先手必胜还是先手必败。巴什博弈尼姆博弈阶梯博弈斐波那契博弈现在先进入一个最经典的博弈类型:巴什博弈Brave Game HDU - 1846现在定义两个字母:NNN 为先手必胜, PPP 为先手必败。在该例题中,每次可以取1~m个石子,现在先假设能够取 m=3原创 2021-02-10 12:38:59 · 636 阅读 · 0 评论 -
Doubloon Game HDU - 4203 博弈论,NP关系推理
首先枚举 kkk ,先枚举当 kkk 为奇数的情况,当 k=1k=1k=1 的时候,显然 nnn 为奇数的时候先手必胜,此时需要走1步便可通往 PPP 点。当 k=3k=3k=3 的时候:下标0123456789状态PPPNNNPPPNNNPPPNNNPPPNNNPPPNNN同样当 k=5k=5k=5 的时候,状态表跟上图一样;可以发现当 kkk 是奇数的时候,永远满足 nnn 为奇数的时候先手必胜,并且1步可以通往 PPP 点;反之.原创 2021-02-10 09:01:54 · 223 阅读 · 0 评论 -
Aladdin and the Game of Bracelets LightOJ - 1344 博弈论,求sg函数
这道题显然就是要求每一个珠子串对应的 SGSGSG 值假设选取该珠子串中的一个权重 www ,拆分成1个或多个字串后,将这些子串的 SGSGSG 值的异或和,便是该珠子串到下一个状态的可达 SGSGSG 值标记。当最后子串里仅剩下一个珠子的时候,这个的子串 SGSGSG 值为1每次都递归的求出子串的 SGSGSG 值,最后按照 SGSGSG 的含义取 mexmexmex 即可详情请看代码#include <bits/stdc++.h>using namespace std;t.原创 2021-02-09 21:59:12 · 133 阅读 · 0 评论 -
Game of Hyper Knights LightOJ - 1315 博弈论,记忆化搜索求NP关系
给定一个图,可以根据图示进行6个方向移动,这里只有两个位置限制,最上方的 xxx 轴与最左方的 yyy 轴。求出每个棋子的 sgsgsg 值,最后将所有的 sgsgsg 值一起异或即可。求 sgsgsg 的时候进行记忆化搜索。具体详情请看代码#include <cstdio>#include <vector>#include <cstring>using namespace std;typedef long long ll;const int N =.原创 2021-02-09 21:17:40 · 138 阅读 · 0 评论 -
Crazy Calendar LightOJ - 1393 博弈论,阶梯博弈
此题题目只看最后一段即可。题目意思是可以将一个堆的任意石子移动到右端或者下端。可以发现最后所有的石子最终都汇入右下角的那一格当中。可以得出是阶梯博弈,定义右下角的格子为0号点,与0号点的曼哈顿距离(∣x1−x2∣+∣y1−y2∣|x_1-x_2|+|y_1-y_2|∣x1−x2∣+∣y1−y2∣)为奇数的是奇数堆,偶数的是偶数堆。最终答案将奇数堆的进行异或即可。#include <bits/stdc++.h>using namespace std;typedef long原创 2021-02-09 21:08:01 · 194 阅读 · 0 评论 -
A Multiplication Game HDU - 1517 博弈论,NP关系,记忆化搜索
题目是从 p=1p=1p=1 开始游戏,谁先到达 nnn 即为胜者。在代码当中,定义先手必胜 NNN 点的 sgsgsg 值为1,另外先手必败的 PPP 点为 -1。在博弈论当中,如果一个状态走到下一个状态的路径中存在 PPP 点,则该点的状态必定是 NNN 点;反之若下一个状态不存在 PPP 点,则这个状态为 PPP 点。定义初始值 sg[1]sg[1]sg[1] 为 P,对 nnn 进行记忆化搜索即可。详情请看代码#include <bits/stdc++.h>using nam.原创 2021-02-09 21:00:48 · 172 阅读 · 0 评论 -
Incredible Chess LightOJ - 1186 博弈论求sg函数
根据题目意思,现在假设先手即白棋向下走 xxx 步,那么后手黑棋也可以向下走 xxx 步,此时对于整个游戏而已没有任何的干涉。同样的后上即黑棋向上走 xxx 步,白棋跟着向上走 xxx 步也并不影响结局。所以取决定性的是白棋与黑棋之间的间隔。假设间隔数量为 xxx ,显然任意一个棋子可以在间隔中走任意步数,所以对应的 sg[x]=xsg[x]=xsg[x]=x,最后直接求答案即可。#include <bits/stdc++.h>using namespace std;typede.原创 2021-02-09 20:49:18 · 157 阅读 · 0 评论 -
Being a Good Boy in Spring Festival HDU - 1850 博弈论,利用异或的性质
由于在一堆中可以取任意张牌,所以对于一个堆的牌数量 xxx,有 sg[x]=xsg[x]=xsg[x]=x先求出总的游戏 SGSGSG 值 ans=sg[a1]⊕sg[a2]⊕...⊕sg[an]ans=sg[a_1]\oplus sg[a_2] \oplus...\oplus sg[a_n]ans=sg[a1]⊕sg[a2]⊕...⊕sg[an]若 ans=0ans=0ans=0 则先手必败。反之,先手必胜。那么对应第一局的可走的路:假设有两堆牌 x,yx,yx,y,假设取 yyy 中的牌,.原创 2021-02-09 20:39:54 · 130 阅读 · 0 评论 -
Coin Game HDU - 3951 博弈论NP推理,利用镜像的对称性
首先,对于一种情况:n≤kn\le kn≤k的时候,直接先手必胜,一步全拿即可。当 k=1k=1k=1 的时候,此时若 nnn 为奇数,则先手必胜,为 NNN 点;若 nnn 为偶数,则先手必败,为 PPP 点。对于剩下的情况,则需要用镜面原理来探究了。首先对于先手,取了任意颗石子之后,后手可以根据剩余石子数量的奇偶性来进行选取,保证最后造成的两片对称。题目意思是只能够取连续的片段,所以在上面中,原本是一个环状的,先手取完之后形成了一个圆弧,后手再对这个圆弧分成一模一样的两片:若先手取完之后剩余的石.原创 2021-02-09 20:24:30 · 275 阅读 · 0 评论 -
Nim or not Nim? HDU - 3032 先通过sg打表,找出规律再 O(n) 解决
题意有两种选择:①移除堆里面的一些石子 ②将一个堆的石子分成两份由于这题 SIS_ISI 的范围在 231−12^{31}-1231−1 的范围内,无法进行 sgsgsg 函数的预处理,所以只能选择先将 sgsgsg 函数的一部分表打出来,找出规律再对每个数进行处理。根据题目意思,首先第一步可以得出对于 j∈[1,ai−1]j\in[1,a_i-1]j∈[1,ai−1],有 vis[sg[j]]=truevis[ sg[j] ]=truevis[sg[j]]=true根据第二步,可以将一个堆分原创 2021-02-09 20:12:33 · 175 阅读 · 0 评论 -
Game HDU - 3389 阶梯博弈,找出规律即可
按照题目意思,选取几个点,最后得出的图如下:图片来源于此根据上图的规律,发现没有出度的点是1,3,41,3,41,3,4,换言之最后所有的石子都会归类到 1,3,41,3,41,3,4 这三个堆上,由此可得出这属于阶梯博弈。阶梯博弈的性质可以近似当成最后结果中,有些许堆的石子是无法被移出的,无论该堆的数量多少。根据阶梯博弈的性质,可以把 1,3,41,3,41,3,4 当成是阶梯博弈中的0号点,即偶数堆,其余的 modmodmod 6 !=1,3,4!=1,3,4!=1,3,4 的则是奇数堆。将奇原创 2021-02-09 19:57:05 · 220 阅读 · 0 评论 -
Calendar Game HDU - 1079 博弈论打表
题意给定一个包含年月日的日期,每次移动只能向未来移动一天或者一个月,若无法移动一个月(如1月31日移动2月份),那就不进行这次操作。由于数据给定的从1900年至2001年,只有100年的天数,上限不超过四万个天数,可以先预处理打表后 O(1)O(1)O(1) 查询得到,或者在线处理然后套个记忆化搜索,类似于 dpdpdp ,代码如下,采用记忆化搜索进行解决。在代码当中,定义先手必胜 NNN 点的 sgsgsg 值为1,另外先手必败的 PPP 点为 -1。在博弈论当中,如果一个状态走到下一个状态的路径原创 2021-02-09 19:42:28 · 278 阅读 · 1 评论