博弈
Coco_T_
东南大学本科毕业生,浙江大学在读研究生
展开
-
Nim游戏(初谈博弈)
通常的Nim游戏的定义是这样的:有若干堆石子,每堆石子的数量都是有限的, 合法的移动是“选择一堆石子并拿走若干颗(不能不拿)”,如果轮到某个人时所有的石子堆都已经被拿空了,则判负(因为他此刻没有任何合法的移动)。*这游戏看上去有点复杂,先从简单情况开始研究吧。 如果轮到你的时候,只剩下一堆石子, 那么此时的必胜策略肯定是把这堆石子全部拿完一颗也不给对手剩,然后对手就输了。*如果剩下两堆不相原创 2017-06-04 18:53:59 · 1005 阅读 · 0 评论 -
poj1704 Georgia and Bob(Nim变形:阶梯博弈)
题目链接分析: 有不少博弈问题都是Nim游戏的变体: 对于所有可以移动的棋子,考虑两个相邻的棋子 先手移动前一个棋子,后手就可以模仿操作移动相等的步数 这样操作后这两个相邻棋子之间的间隔大小是不会有变化的我们把序列上的所有棋子两两绑定 如果棋子个数是奇数,第一个棋子与位置0配对 两两成组,组与组之间是不会互相影响的那么单独看一组: 想要消除之间的间隔,唯一的方法就是移...原创 2018-02-10 09:21:09 · 265 阅读 · 0 评论 -
poj1740 A New Stone Game(阶梯博弈)
题目链接分析: 对于博弈问题,真的没什么办法首先考虑,如果有两堆数量完全相同的石子,我们是可以进行模仿操作的 这种情况下先手必败现在我们考虑两堆数量不同的石子 先手可以通过一次操作使得两堆石子的数量相等,转化成了上一种情况 此时先手必胜再看一下有三堆石子的情况: 1,1,1:先手必胜 1,2,1:先手必胜 2,2,2:先手必胜 总之都是先手必胜四堆石子: 1,...原创 2018-02-10 10:59:45 · 293 阅读 · 0 评论 -
poj2068 Nim(博弈|dp)
题目链接分析: 双方都有操作集的Nim游戏 没有什么好办法,所以就想计算SG值 但是双方的操作并不等价(双方的操作集不一样) 我们没有办法直接计算SG函数解决方法:记忆化搜索 设计状态:f[i][j]f[i][j]f[i][j]表示第iii个人,还有jjj个石子的情况下是否能赢 直接搜索即可终止状态:if (rst==1) return 0; //必败态if...原创 2018-02-10 14:28:42 · 290 阅读 · 0 评论 -
poj3480 John(用SJ定理解决Anti_SG游戏)
题目链接分析: 题目限制和Nim游戏一样 但是拿到最后一个M&M的人输这类特殊的游戏就叫做Anti_SGAnti-SG游戏决策集合为空的操作者胜 其余规则与SG游戏一致这种游戏有一个特殊的解决工具:SJ定理 我们先来看一下SJ定理的内容SJ定理对于任意一个Anti-SG游戏,如果定义所有子游戏的SG值为0时游戏结束,先手必胜的条件: 1....原创 2018-02-11 11:21:03 · 370 阅读 · 0 评论 -
poj2348 Euclid's Game(博弈)
题目链接分析: 一开始我直接记搜 但是题目中连数据范围都没给,铁定RE实际上这道题我们还是要分情况讨论一下: 设(x,y)(x,y)(x,y)中x>yx>yx>yx−y<yx−y<yx-yxxx中减去一个yyy 如果(y,x−y)(y,x−y)(y,x-y)是必败态,那么(x,y)(x,y)(x,y)就是必胜态x−y>yx−y>yx-y>...原创 2018-02-11 15:15:04 · 256 阅读 · 0 评论 -
poj3710 Christmas Game(树上删边游戏+tarjan缩点)
题目链接分析: 知识储备很多东西,不知道原理,是根本没法搞的 但是知道原理了之后,问题就简单多了我们把题目给出的仙人掌结构,利用tarjan缩点 变成一个简单一点的树形结构 (遵循原则:奇数边的环等价成一条边,偶数边的环等价成一个点)树上结点的SG值为(ta的所有子节点的SG值加1)的异或和 dfs一遍,计算SG值即可tip注意奇环时需要加一条边不停狂WA的...原创 2018-02-12 14:11:48 · 540 阅读 · 0 评论 -
树上删边游戏及其拓展(公平博弈:克朗原理+费森原理)
参考资料问题描述在某一棵树上删除一条边,同时删去所有在删除后不再与根相连的部分 双方轮流操作,无法再进行删除者判定为失败 一个游戏中有多棵树,我们把ta们的根都放在地板上,方便之后的处理在此,我们讨论的将是公平游戏,即双方都可以删除任意的树边 我们称这个游戏为:Green Hachenbush(树上公平删边游戏)之所以强调是公平博弈,是因为还有另一种删边游戏,是不公平的,...原创 2018-02-11 20:39:22 · 4305 阅读 · 1 评论 -
hdu3404(Nim积)
题目链接题目大意: 一个二维矩阵上,有若干个亮着的灯泡 每次选择一个矩阵(右上角的灯泡必须是亮的),改变四个角灯泡的状态分析: 论文:《从“k倍动态减法游戏”出发探究一类组合游戏问题》这道题就是Nim积的运用啦 但是看不懂啊直接献上代码:#include<cstdio>#include<cstring>#include<iostream...原创 2018-02-13 14:25:35 · 765 阅读 · 0 评论 -
poj2505 A multiplication game
题目链接分析: 感觉自己的博弈是从零学起大多数博弈问题都可以先找找规律n=2−9" role="presentation" style="position: relative;">n=2−9n=2−9n=2-9 先手可以一步达到目标,先手必胜 n=10−18" role="presentation" style="position: relative;原创 2018-02-07 20:41:10 · 177 阅读 · 0 评论 -
bzoj2688 Green Hackenbush(博弈+概率dp)
Description 有一个古老的游戏叫做Green Hackenbush,游戏是这样进行的:两个人轮流在一棵树上删边,每次删边后不与根联通的子树直接被ignore,不能删边的游戏者输。Alice和Bob也在玩这个游戏,不过他们面对的是n棵树,第i棵树是含有a[i]个节点的二叉树。先手的Alice想知道自己有多大的概率获胜(假设我们的Alice和Bob同学都是无限聪明的)。 In...原创 2018-03-06 09:51:22 · 568 阅读 · 0 评论 -
poj2425 A Chess Game(博弈)
题目链接分析: 题目中有如此限制:there are directed edges connecting some positions, and no cycle exists.题目给出的一定是一个DAG并不是很容易看出规律 我们可以考虑计算一下每个点的SG函数 最后计算每一个结点SG的Nim和即可tip一直RE我一开始以为是初始化,改好了还是RE后来以为是因为:...原创 2018-02-09 16:48:12 · 276 阅读 · 0 评论 -
poj2960 S-Nim(博弈SG函数)
题目链接分析: 后继状态有限制的Nim游戏 直接暴力计算SG函数即可tip写完了就WA 拍了一下,也没什么问题吃饭的时候突然恍然大悟:给出的s集不一定是递增的 一开始我的写法是:for (int j=1;j<=n&&s[j]<=i;j++) 这样遍历的话,一旦遇到一个>i>i的数就会终止循环 所以改一下:for (int j=1;j<=n;j++) if (i>=f[j]) p[原创 2018-02-09 18:02:47 · 262 阅读 · 0 评论 -
poj2484(博弈)
分析: 先手第一次操作后,就可以把一个环变成一个序列,下面的讨论都是基于序列 我们还是先找规律: 先手必胜(面对序列的先手) 后手必胜 1,2,3,4,6,7 0,5紧扣博弈的规则: 规则一:必胜态至少有一个后继状态是必败态 规则二:必败态的所有后继状态都是必胜态 我们是可以通过这些退出每一个状态的必胜还是必败但是这样的判断复杂度高达O(n...原创 2018-02-09 14:45:39 · 331 阅读 · 0 评论 -
bzoj2463谁能赢呢?
Description 小明和小红经常玩一个博弈游戏。给定一个n×n的棋盘,一个石头被放在棋盘的左上角。他们轮流移动石头。每一回合,选手只能把石头向上,下,左,右四个方向移动一格,并且要求移动到的格子之前不能被访问过。谁不能移动石头了就算输。假如小明先移动石头,而且两个选手都以最优策略走步,问最后谁能赢? Input 输入文件有多组数据。 输入第一行包含一个整数n,表示棋盘的原创 2017-06-15 18:26:15 · 271 阅读 · 0 评论 -
生哥的hu测
今天的生哥hu测,都是思路题,代码不长,对于思维的提升很有帮助 可惜没有全力去做。。。T1分析: 不用SG函数的一道博弈 觉得xz的想法非常的好 如果我们想要留下一个点的权值(假设为x) 当且仅当这个点只有一条连边,这是我们就可以把这条边练连的其他点干掉 游戏结束,如果我们不是在这种情况下进行了与x相连的边的删减 这就会导致这个点的主动权到了另一个人手里 因为两人的目的完全不同,所以原创 2017-08-25 18:48:42 · 346 阅读 · 0 评论 -
今天我们来玩游戏(博弈)
鸣谢xym学长 其实前面的都是废话 精髓都在最后的SG定理中了很难理解? 那好,我们举个栗子 Nim游戏: 其实学长的课件上有写解法, 但是我觉得写得太烂 还是自己说比较清楚*复杂的情况我们考虑不过来,那就从简单的开始 如果只有一堆,先手必胜(都拿走就好了)*两堆: 如果有两堆中的石子数目相同, 那么先手从任意一堆中拿走任意数目 后手只要在另一堆中模仿ta的操作,原创 2017-08-22 20:31:41 · 336 阅读 · 0 评论 -
bzoj1188 [HNOI2007]分裂游戏
Description聪聪和睿睿最近迷上了一款叫做分裂的游戏。 该游戏的规则试: 共有 n 个瓶子, 标号为 0,1,2…..n-1, 第 i 个瓶子中装有 p[i]颗巧克力豆,两个人轮流取豆子,每一轮每人选择 3 个瓶子。标号为 i,j,k, 并要保证 i < j , j < = k 且第 i 个瓶子中至少要有 1 颗巧克力豆,随后这个人从第 i 个瓶子中拿走一颗豆 子并在 j,k 中各放入一粒豆原创 2017-08-23 18:59:51 · 225 阅读 · 0 评论 -
SG函数和SG定理
大神链我们先用一个简单的例子引入: 考虑有这样一个游戏,有3堆火柴,分别有a,b,c根,记为(a,b,c) 每次一个游戏者可以从任意一堆中拿走至少一根火柴,也可以整堆拿走,但是不能从多堆火柴中拿 无法拿火柴的人输 这个游戏就叫做Nim游戏举个例子,假设a=1,b=2,c=3,若你先拿,你会怎么办呢? 方案一:(1,2,3)—->(0,2,3),然而只要对手把状态变成(0,2,2)原创 2018-01-21 08:38:23 · 2706 阅读 · 0 评论 -
hdu1848 Fibonacci again and again(SG)
题目链接分析: SG函数的入门题 因为数据范围比较小,我们可以直接暴力计算SG函数#include<cstdio>#include<cstring>#include<iostream>using namespace std;int f[15]={1,2,3,5,8,13,21,34,55,89,144,233,377,610,987};int SG[1002],S[1002],n,m,p;原创 2018-01-21 11:15:35 · 186 阅读 · 0 评论 -
poj2234 Matches Game(SG)
题目链接分析: 这道题就是NimNim游戏 在Nim游戏中,因为我们可以从一堆中取任意数量的元素,所以SG(x)=xSG(x)=x(不能不取) 直接计算NimNim值即可 不知道我在说什么的朋友戳这里如果NimNim值等于00,那么先手必败 (不好记的话可以想一下:如果当前面对的是没有元素的局面,先手是胜还是败呢)#include<cstdio>#include<cstring>#in原创 2018-01-21 11:26:53 · 225 阅读 · 0 评论 -
bzoj1228 [SDOI2009]E&D(博弈【规律)
题目链接分析: 整个问题可以看做是n/2个子问题组成的 根据博弈问题的基本套路,我们要找到每一种状态的SG值,异或起来 如果异或和是0,说明先手必败所以题解都是打表找规律 那好,我把表给出来: 看的我想吐。。。一个显然的规律: 若x和y都是奇数,那么sg=0至于整个数据的规律,需要一点想象力 我们从左上角向右下角看,可以发现是一个逐渐递增的三角形 三角形的值也在原创 2018-01-07 10:35:05 · 533 阅读 · 0 评论 -
poj1067 取石子游戏
题目链接分析: 看题解中都提到了这个东西:威佐夫博弈详细介绍知道了奇异局势的通项: 我们先算出aaa应该在第几项: 但是我们算出的n可能有1的误差 简单的判断一下前后几项奇异局势是否和(a,b)(a,b)(a,b)符合即可#include<cstdio>#include<cstring>#include<iostream>#in...原创 2018-02-09 10:58:21 · 278 阅读 · 0 评论 -
威佐夫博弈,Beatty定理和黄金分割数
所有的博弈问题都是一些看起来挺有趣的问题 实际上其中的分析比较复杂那我们就来看看博弈中的一种特殊类型:威佐夫博弈描述 威佐夫博弈(Wythoff′sWythoff′sWythoff's gamegamegame) 有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜很典型的一个博弈问题 比较暴力的做...原创 2018-02-09 11:28:07 · 3438 阅读 · 2 评论 -
loli的毒瘤hu测 T1.game(博弈+bfs)
分析: 一眼博弈 博弈有两个很重要的原则: 必胜态至少有一个后继是必败态 必败态的所有后继都是必胜态于是考场上我就dfs瞎搞得了点分实际上这道题的博弈树结点数量最多只有2n2n2n个 即先手为Alice或Bob且棋子在1−n1−n1-n位置上 首先我们知道棋子位于位置1的两个结点都是必败态 如果某个结点的后继都是必胜态,那么ta就是必败态 如果后继中...原创 2018-03-28 14:31:03 · 199 阅读 · 0 评论