首页 > 其他分享 >博弈论学习笔记

博弈论学习笔记

时间:2024-08-14 14:48:41浏览次数:14  
标签:偶数 游戏 nim sg 博弈论 笔记 学习 异或 SG

nim游戏变种

限制取m的nim游戏

即巴什游戏+nim游戏,求出每堆数目\(a_i mod(m+1)\)的异或和,如果为0,则先手必败,反之先手必胜.

我们仍可从P,N来分析.假设目前为先手必败的局面,先手不管拿多少个,都会使得\(a_i mod(m+1)\neq 0\)(因为取的数目不能超过m;

假设目前先手必胜的局面,只许选择一个减少使其余数和起它异或和变为0就可(可以证明绝对可行,进一步的,若是前面有人出招,只许在同一堆石子中挑出\(m+1-(上一个人挑走的石子数)\)即可

阶梯NIM

nim游戏的变形,两人轮流操作,每回至少从第\(i\)的位置移动一个石子到\(i-1\)位置,是谁先移动完谁胜利.

我们先假设偶数位置不动,两人都只移动奇数位置,容易看出这其实就是一个在奇数位置的普通nim游戏.

可是若是对手动了偶数位置的该咋办,我们只需把被增加的奇数位置增加的数目挑去即可(这样局势变回了动偶数位置前)

但是若是奇数位置取完了咋办,对手只能取偶数位置,这样奇数位置就又多出来石子,我们只需继续跟上面一样挑出石子,这样下一轮对手还是只能挑出偶数位置的石子,坚持这样终将会让对手陷入只有最后一个位置(0处)有石子的处地,也就是没法选输了

也就是说所有奇数位置石子数目的异或和不为0,先手必胜,反之必败

P3480 [POI2009] KAM-Pebbles

nim游戏变种不过每回取之后必须单调递减,可以发现由于每堆数目都大于前一堆数目,所以后减前都为正数,不妨把这个差值作为一个新的nim游戏,发现每回取走石子刚好相当于前差值减一,后差值加一,便化为了上面的阶梯nim

[SHOI2008] 小约翰的游戏

先手必胜当且仅当:

  • 只有偶数个孤单堆

  • SG值不为0,且有多于一个石子的充裕堆

在这看题解

SG函数及定理

图游戏:

我们把游戏中各个状态都化为一个点,如果一个状态可以通过一次操作转化为下一个状态,那么就相当于连一个有向边,设最后的点为先手必败的状态,这样形成了一个DAG,其实现在这个游戏就可以转化为现在有俩绝顶聪明的人在轮流移动图上的一个棋子向下一个点,直到最后没法移动时便输了。

SG函数:

设最后的汇点的sg值为0,然后其它的点的sg值是它能到达的所有点sg值的\(mex\)值,当此点sg值为0,先手必败,反之先手必胜

在有向图上推导sg值的代码例子:

int F[MAXN];//可以转移的状态集合,一般题目会给出 
int S[MAXN];//表示该点可以转移到的状态有哪些 
int SG[MAXN];//该点的SG值 
void GetSG()
{
	for(int i=1;i<=N;i++)//枚举DAG中所有点(也可以看作拓扑排序顺序)
	{
		memset(S,0,sizeof(S));//初始化
		for(int j=1;j<=limit&&F[j]<=i;j++)//limit表示转移的集合的大小
			S[SG[i-F[j]]]=1; 
		for(int j=1;;j++)
			if(!S[j])
				{SG[i]=i;break;}//根据定义计算SG函数 
	}
}

SG定理:

游戏的和的SG值是他们的SG值的xor值。

这样我们便可以把一个游戏分解为多个子游戏,通过它们的sg值的异或和来判断是否正确。

Multi-SG游戏

有时候一些博弈游戏会出现这种情况:一个点到达的状态点可以被分为多个子游戏,这样这个状态点的sg值由定理可得是它所有子游戏的sg值的\(mex\)值。

我们可以以例题为例

P3185 [HNOI2007] 分裂游戏

题意:

现在有两个人轮流从 \(n\)瓶被标号为 \(0,1,...,n−1\) 的巧克力豆中取豆子,第 \(i\) 个瓶子中装有 \(p_i\) 颗巧克力豆。每一轮每人选择 3个瓶子,标号为$ i,j,k$ 并要保证 \(i<j,j≤k\)且第 \(i\)个瓶子中至少要有 1 颗豆子,随后这个人从第 \(i\)个瓶子中拿走一颗豆子并在 \(j,k\)中各放入一粒豆子,问先手是否有必胜策略,如果有则输出第一步操作中字典序最小的一组解和总方案数,没有则输出输出用一个空格两两隔开的三个 \(−1\)。

题解:

具有典型的Multi-SG游戏的特征,我们不妨把每一个 \(i\) 向所有可能的 \((j,k)\) 连边,也就是说我们 \(mex\) 上的是 \(sg(j)\oplus g(k)\) ,然后我们的ans是子游戏的异或和,思考我们要寻找哪些子游戏?

考虑如果是先手必败的情况,也就是说当前先手的 \(sg\) 值为0,先手经过操作后,留给后手的 \(sg\) 值绝对不为0,而后手为了让先手必败,就要维持之前的 \(sg\) 值也就是0,这个时候,后手只需要模仿先手的操作,这样得到的sg值就能又回到0(可以手动模拟一下)。

所以这是一个不断模仿的过程,也就是说一个瓶子会会被两个人相互取直到取完,考虑如果最后取得人和最先取的人不一样,这个子游戏便相当于输掉,\(sg\)值为0,这个子游戏不用异或。

进一步的说,偶数个巧克力豆的游戏不用异或,只需要异或奇数个巧克力豆的游戏。

但是我们如果异或了偶数个的会发生什么?其实我们发现偶数个的 \(sg\) 值实际上竟然在预处理中竟然不为 \(0\),这让我们大感诧异,仔细思考,这其实也是正常的,因为图上的\(sg\)值并不是它本身的\(sg\)值,只能代表联动之后的\(sg\)值,因为是不断模仿出的牌,所以我们只需要考虑最后先后手变换,所以那些转化只能代表变换先后手的也就是说,对于奇数个,联动就刚好没影响的联动完,所以可以直接套用,偶数就不行了;

额,那么拿到总游戏的 \(sg\) 值后,在先手必胜的情况下,我们可以通过寻找可以使得\(sg\) 值变为0的\(i,j,k\)作为第一次选的。

树上的博弈

P9133 [THUPC 2023 初赛]大富翁

很牛的一道题,可以经过一系列式子的转化,可以把一个人选的点集集合所赚到的金币,转化为与另外一个人的选法无关的值:\(\sum_{a\in S} sz[a]-w[a]-dep[a]\)。

最后只需把点按点权\(sz[a]-w[a]-dep[a]\)从大到小排序,然后两人依次取,最后两人各自的和便是各自的答案。

推导式子可以参考官方题解:

题解

P4643 [国家集训队] 阿狸和桃子的游戏

懂了就是一道大水题(也不能这样说,因为有思维),考虑到我们要求出来的是差值,所以两边加上相同的值不会产生影响,而一个人的点集里贡献要算上点权和边权,不妨把每一条边的边权平摊给两个点的点权。

这样一条边如果被分到一个点集里这一条边的贡献就会被加齐,如果分到不同点集中,因为平摊出去相同的值,所以相减得到的差会抵消掉这个影响。

所以策略应当是平摊完之后对点权排序,依次取;

启发

发现两道树上博弈并没有考虑过程,而是通过推式子的方法,来得出最后答案应当有的形式来确定策略,思考树上博弈了话可以往这个方向来考虑。

标签:偶数,游戏,nim,sg,博弈论,笔记,学习,异或,SG
From: https://www.cnblogs.com/huanghezhe/p/18358987

相关文章

  • 学习Java的日子 Day68 jQuery操作节点,Bootstrap
    jQuery1.jQuery操作DOMDOM为文档提供了一种结构化表示方法,通过该方法可以改变文档的内容和展示形式在访问页面时,需要与页面中的元素进行交互式的操作。在操作中,元素的访问是最频繁、最常用的,主要包括对元素属性attr、内容html、值value、CSS的操作1.1操作内容获取......
  • 基于flask+vue框架的某高校学生学习笔记共享平台的设计与实现[开题+论文+程序]-计算机
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在信息化高速发展的今天,高等教育领域正经历着前所未有的变革。随着知识量的急剧增长和学习方式的多样化,学生们面临着如何高效管理和利用学......
  • Java基础-学习笔记11
    11枚举、注解枚举枚举是一组常量的集合。可以这么理解:枚举属于一种特殊的类,里面只包含一组有限的特定的对象。比如,Season类,只包含SPRING、SUMMER、AUTUMN、WINTER四个对象常量。两种实现方式(1)自定义类实现枚举     1)构造器私有化     2)本类内部创建一组对......
  • Java中封装的学习
    封装目录封装概念优点例子概念封装(encapsulation)是指对于某个对象,Java隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的代码和数据,必须通过严格......
  • 超详细!网络安全知识入门及学习流程
    第一章:网络安全的基本概念和术语网络安全是指保护网络系统、硬件、软件、数据以及用户的隐私和权益,防止其受到未经授权的访问、篡改、窃取或破坏。以下是一些网络安全的基本概念和术语:漏洞(Vulnerability):指系统或软件中存在的弱点或缺陷,可能被攻击者利用来获取未经授权的......
  • 结构开发笔记(三):solidworks软件(二):小试牛刀,绘制一个立方体
    若该文为原创文章,转载请注明原文出处本文章博客地址:https://hpzwl.blog.csdn.net/article/details/141122350长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…硬件相关开发......
  • AI解题助手:学习新伙伴,智慧新飞跃
    本文由ChatMoney团队出品在当今这个信息爆炸的时代,学习不再局限于传统的书籍与课堂。AI解题助手作为新时代的智慧工具,正以其独特的亮点和显著优势,引领学习方式的革新。ChatMoneyAI解题助手,以其即时响应、精准解答的能力,让难题迎刃而解。无论面对的是复杂的数学公式,还是深奥......
  • AI解题助手ChatMoney:提高你的学习效率
    本文由ChatMoney团队出品在当今这个信息爆炸的时代,学习不再局限于传统的书籍与课堂。AI解题助手作为新时代的智慧工具,正以其独特的亮点和显著优势,引领学习方式的革新。ChatMoneyAI解题助手,以其即时响应、精准解答的能力,让难题迎刃而解。无论面对的是复杂的数学公式,还是深奥......
  • freeRTOS入门学习-基于STM32F103C8T6最小系统板-创建任务_声光色彩
    首先重温一下任务的三大要素:        ·做何事(函数)    ·栈(每个任务都应该有自己独享的栈)    ·优先级(非必要的因素,但是有了优先级可以处理更多的任务)一、如何创建任务:    当一个任务被切换出去之后,要想再找到他,应该去到某个链表里边......
  • C#学习笔记——入门
    <divid="article_content"class="article_contentclearfix">    <linkrel="stylesheet"href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/kdoc_html_views-1a98987dfd.css">    &l......