基础博弈论(NIm,威佐夫,巴什游戏)

理论: 博弈2: 巴什博奕(Bash Game) 巴什博奕基础情形 只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。 如果n = m + 1; 我们假设第一个人拿走了k个, 还剩下 m + 1 - k。 因为1<=(m + 1 - k)<= m, 所以, 剩下的部分一定可以被第二个人一次性取走。现在我们将上述规律加一推广: 如果n=(m+1)r+s(r∈ N,s<= m); 那么先取者要拿走s个 阅读详情

最近刚刚接触了基础博弈论 一开始感觉是一个非常难以理解的专题 看了几天别人的题解 写了几道题感觉稍微有了一点点的感觉 下面来总结一下几个常见的基础博弈

1.巴什游戏

最简单的那当然就是巴什游戏了题目是说有一堆石子A,B分别去取石子每一次可取的数目为1—m个最后没有石子可以去的人则为败方那么思路很简单 先想当有m+1个石子时候不论先手取多少个 后手一定可以一次性取完,所以后手一定赢 那么再思考如果有n*(m+1)个我们都可以让先后手保持这样的状态 先手取k个后手取m+1-k个保证每一个周期结束后数目仍然是m+1的倍数直到m+1时候 先手取完后 后手全部取完 如果不是m+1的倍数那么先手只需要一定数目的石子让其变为m+1的倍数即可 所以有当n%(m+1)==0先手必败n%(m+1)!=0先手必胜

2.NIm游戏

规则像是巴什游戏的升级版 有n个石子堆每一个人能对任意一个堆任意个石子(不能为0)最后没有石子可取的人败这里需要用到数学知识推理(我不会直接给出结论)

设sum[]记录每一个堆的数量那么如果 sum[1]^sum[2].....^sum[n]==0先手必败 否则先手必胜

3.威佐夫游戏

这个游戏是说有两个石子堆玩家可以对一个石子堆取任意石子也可以对两个石子堆取相同数目的石子最后没有石子可取的人败

这里我们需要用到黄金比例

double gold=(1+sqrt(5))/2;

两个堆的数量之差乘黄金比例如果等于较小的那个数量则先手必败否则先手胜

4.反NIm游戏

规则是一样的只是说最后没石子拿的人胜利 那么结论也相似 如果全部石子堆的数量都是1那么需要判断奇偶性 奇数后手胜 偶数先手胜 如果有一个或多个数量大于一的石子堆 那么还是取异或和如果 sum[1]^sum[2].....^sum[n]==0先手必败否则先手必胜

5.SG函数和Mex

Mex是对一个集合的运算 是求不等于集合中任意一个数的最小非负整数如Mex{1,2,3}=0;

SG=0时是必败点 其他为必胜点 所有的必败点都可以指向必胜点一定不会再指向必败点 而所有的必胜点都会指向必败点 SG函数就是对一个结点的所有后继点进行SG运算 比如已知SG[0]=0;

SG[1]=1; SG[2]=2;如果结点3指向1,2,0那么SG[3]=3;对于不同的游戏SG函数有不同的算法

如巴什游戏中

因为可以取1-m个石子所以n的后继结点(对n进行一次操作)为n-m,n-m-1,n-m-2,n-m-3.....n-1;

而每一个结点又有自己的后继结点

用SG解决巴什游戏代码如下

#include<iostream>
#include<cstring>
using namespace std;
int s[1000],sg[1000];//s记录每一个结点的后继结点的sg每循环一次都要清空一次 
bool bashi(int n,int m)
{
	return n%(m+1)==0;
}
void getSG(int n,int m)
{
	memset(sg,0,sizeof(sg));
	for(int i=1;i<=n;i++)
	{
		memset(s,0,sizeof(s));
		for(int j=1;j<=m&&i-j>=0;j++)
		{
			s[sg[i-j]]=1;
		}
		for(int j=0;j<=n;j++)
		{
			if(!s[j])
			{
				sg[i]=j;
				break;
			}
		}
	}
}
int main()
{
	int n,m;
	while(cin>>n>>m)
	{
		int ans=bashi(n,m);
		if(ans)cout<<"后手
";
		else cout<<"先手
";
		getSG(n,m);
		if(sg[n])
		cout<<"先手
";
		else
		cout<<"后手
";
	}
 } 

6.MUlti-SG

如果一个游戏可以再分成多个独立的游戏那么这个游戏的SG就是它分出独立的游戏的SG异或和再进行Mex运算

如 在NIM游戏上多加一个操作即玩家可以选择拿走任意石子或者把大于2的石子分为两堆那么这里分为两堆就是变成了两个独立的游戏就用到了Multi—SG 代码如下

#include<iostream>
#include<cstring> 
using namespace std;
int sg[1000],s[1000];
void getsg()
{
	memset(sg,0,sizeof(sg));
	sg[0]=0;
	sg[1]=1;
	sg[2]=2;
	for(int i=3;i<=1000;i++)
	{
		memset(s,0,sizeof(s));
		for(int j=0;j<=1000&&j<=i;j++)
		{
			s[sg[i-j]]=1;
			3s[(sg[j]^sg[i-j])]=1;
		}
		for(int j=0;j<1000;j++)
		{
			if(!s[j])
			{
				sg[i]=j;
				break;
			}
		}
	}
}
int main()
{
	int n;
	getsg();
	while(cin>>n)
	{
		int a[100];
		int sum=0;
		for(int i=0;i<n;i++)
		{
			cin>>a[i];
			sum^sg[a[i]];
		}
		if(sum==0)cout<<"0"<<endl;
		else cout<<"1"<<endl;
		 
	}
} 

对于SG函数一开始我也是很不理解多做了一些的题目发现其实一个堆代表一个独立的游戏 而每一个堆的数量就是最高的SG结点而根据操作(仅操作一次)一开始的n会变为其他数量m,k,l,这些就是n的后继结点而在操作一次数量会再次变化这些就是m,k,l的后继结点 因此不同的题目SG的算法不同 

7.规律型博弈

这种博弈我认为是我们先找到一个必胜点作为目标状态(如巴什游戏中的n*(m+1))然后当时其他状态的时候通过操作转为目标状态再加以分析题目就会简单明了许多

 

【小组专题二:博弈论入门综述(1)】NP状态 | SG函数 | 巴什博奕、威佐夫博弈、斐波那契博弈、Nim游戏、SJ定理 博弈论综述【1】前言博弈与博弈论博弈树NP状态SG函数(Sprague-Grundy)Sprague-Grundy Theorem巴什博奕 Bash Game威佐夫博弈扩展威佐夫博弈斐波那契博弈Nim博弈拓展Nim博弈与Nim博弈的各个变种(1)拓展维度(2)先手怎么取(3)求先手一开始有多少种取得方式能够赢(4) 变形:有拿取上限(NYOJ-135)(5) 阶梯博弈(**Nim Staircase**博弈)最后的最后:SJ定理与Anti-SG游戏各种练习题啦!可能下期会将的内容(?) 博弈与博弈论 阅读详情

相关推荐

【acm 博弈论 】 之 Nim游戏与sg函数

文章目录前言巴什博弈威佐夫博弈Nim游戏Nim游戏与sg函数题目题意样例思路代码 前言 从今天开始复习和整理下acm的部分模块,从博弈论开始。 著名的“取石子”游戏通常有3种类型,从简单到复杂依次是: 1.巴什博弈 2.威佐夫博弈 3.Nim游戏 4.Nim游戏与sg函数 复习Nim博弈之前,先复习下前两者。 巴什博弈 大意: 一堆物品有n个,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜,问最优策略下谁赢。 思路: 不难发现,当剩下m+1个物品时,先手必败。 所以,如果当前的

weixin_45924828的博客 715

博弈论游戏(一)

取石子问题 1、巴什博弈 一堆石子,有n个,两个人轮流取,每次至少取1个,至多取m个,拿走最后一个石子的人获胜 假设一堆石子有 n=m+1 由于一次只能取m个,无论先手取多少个,后手总能拿走剩余的,这时一定是先手负 于是找到取胜规则: 一对石子 n=(m+1)*r+s 对于先手应该先取走s个,设后手取走k个,先手再取走 m+1-k 剩余的石子个数为 (m+1)(r-1) 以后保持...

weixin_44988779的博客 1万+

ss524v100 调试cvbs输出

启用视频层3 dev2 对应 layer3在vdec与vo绑定的时候(不需要经过vpss),不能绑定错误,以下是绑定的程序。

2116

威佐夫博弈详解

那么第一种想到必败的情况,肯定是(0,0)了。这时,后手只需在第二堆石子中取四个石子,局面变为(2,1),上文已经推理过了,先手必败。这时,后手只需在第二堆石子中取三个石子,局面变为(1,2),上文已经推理过了,先手必败。这时,后手只需在第二堆石子中取六个石子,局面变为(2,1),上文已经推理过了,先手必败。这时,后手只需在第二堆石子中取五个石子,局面变为(1,2),上文已经推理过了,先手必败。这时,后手只需在第一堆石子中取两个石子,局面变为(2,1),上文已经推理过了,先手必败。

Taunting_Wind 1146

SATA硬件电路设计实战:从接口规范到高速布线技巧

本文深入探讨了SATA硬件电路设计的核心要点与实战技巧。从接口物理电气规范、AC耦合电容与阻抗控制等基础,到FPGA/SoC高速收发器选型配置,再到应对6Gbps高速信号的PCB布局布线艺术,系统性地解析了SATA电路设计中的关键挑战与解决方案,助力工程师规避常见陷阱,实现稳定可靠的存储接口设计。

tech5的博客 531

jetson orin nano 使用cuPCL

jetson开发板上使用pcl时,正常使用的是cpu,拖慢了整体的效率。cuPCL有一些库用于使用CUDA处理点云。

weixin_42256401的博客 1020

巴什游戏入门(Bash Game)

入门题

weixin_62528401的博客 1095

ERA5 hourly data批量下载与cdo处理(一)

本篇文章主要介绍了ERA数据的批量下载

qq_40511689的博客 3872

取石子游戏(威佐夫博弈的整理)和动态规划

问题描述:有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。 看起来这很像一种益智游戏,可以依靠枚举来进行尝试,从而找到最终答案,但其中蕴含着一个很有意思的规律,使得这个问题可以依靠代码来运算,那个有趣的规律就是威佐夫博弈. 这个博弈中有个概念叫做奇异局势,就是

zjsru_Beginner的博客 1525

【全网最全最详细】智能体提示词prompt教程

定义:提示词是用户输入给AI模型(如ChatGPT、MidJourney等)的指令或问题,用于引导模型生成特定类型的输出。它是用户与AI交互的核心媒介。作用:提示词的质量直接影响AI输出的准确性和相关性。好的提示词能明确任务边界、减少歧义,并激发模型的创造力。提示词就是“给AI下指令的说明书”——越清楚、越具体,AI干得越好!帮你更快、更准地拿到想要的结果,不用和AI“猜谜语”。

qq_38196449的博客 8220

2025华为od机试真题B卷【停车场费用统计】Python实现

2025华为od机试真题B卷【停车场费用统计】Python实现

MISAYAONE的博客 538

巴什、威佐夫、斐波那契、nim、反nim板子

巴什 两个人在一堆n个物品中取1~m个,拿光者胜出。 n = k * (m + 1) + b,若无余数b,后手可根据先手凑出m + 1,从而必胜。若有余数b,先手拿b个则必胜。 void solve(){ cin>>n>>m; if(n % (m + 1)) puts("first"); else puts("second"); } 威佐夫 ...

SsteelXD的博客 278

mjlab MuJoCo 人形机器人强化学习入门教程(一)安装配置使用

mjlab是融合IsaacLab API与MuJoCo物理引擎的强化学习工具,提供轻量级GPU加速仿真方案。当前处于测试阶段,支持Linux系统(推荐)和有限macOS支持。核心优势包括:1)直接集成MuJoCo Warp实现裸机性能;2)保留IsaacLab成熟的RL抽象层;3)简化安装流程。与IsaacLab相比更专注于MuJoCo生态,适合刚体机器人RL研究。文档包含详细安装指南、平台兼容性说明、与IsaacLab的API差异对比及常见问题解答。项目正在积极开发中,欢迎社区贡献和反馈。

2506_90492529的博客 2000

Nim 游戏及其变形

Nim 在博弈中经常出现,很多看似复杂的题目,在分析和变形之后就回归了最初的nim游戏。 经典的nim游戏 一共有N堆石子,编号1..n,第i堆中有个a[i]个石子。 每一次操作Alice和Bob可以从任意一堆石子中取出任意数量的石子,至少取一颗,至多取出这一堆剩下的所有石子。 两个人轮流行动,取走最后一个的人胜利。Alice为先手。 我们定义Position P:表示当前局面

clover_hxy的博客 1万+

vue2/3 - [超详细] 实现企业微信扫码登录完整流程及代码,vue项目接入企业微信扫码登录功能教程,支持新跳页显示二维码或div容器里内嵌登录二维码(详细代码注释,一键复制开箱即用)

vue企业微信扫码登录,vue网页网站企业微信扫码登录教程,vue如何实现企业微信扫码登录功能,vue详细企业微信扫码登录功能实现,vue2实现企业微信扫码登录,前端vue企业微信扫码登录教程,vue pc电脑端企业微信扫码登录详细教程,vue项目中怎么做企业微信扫码注册登录,vue实现网站接入企业微信扫码登录,vue2做企业微信扫码登录的优质文章教程,vue网站对接企业微信扫码登录,vue企业微信扫码登录如何新开一页全屏显示登录二维码,vue企业微信登录二维码 内嵌在div容器里/跳页显示登录二维码,vu

✅ 精选推荐文章 5702

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

博弈论总结(已更新二分图博弈)

目录 博弈论 组合游戏基础定义 游戏的定义: 游戏的表示: 游戏的和: 组合游戏模型 SG游戏中的SG函数与相关定理 Anti-SG游戏和SJ定理 Multi-SG游戏 Every-S...

weixin_30532973的博客 1570

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

nim 博弈论

几种nim游戏1.排石头游戏2.巴什博奕(Bash Game)3.威佐夫博奕(Wythoff Game)4.nim堆 1.排石头游戏 给你一排n个石头,每次只能取一个或两个,求必胜策略 先讨论石头是奇数还是偶数,奇数就从中间拿一个,然后,对手拿几个,你就从与它对应的位置上拿几个。偶数的话就从中间拿2个。 2.巴什博奕(Bash Game) 只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少...

timeruler的博客 468

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【教程】博弈论学习笔记

博弈论又被称为对策论(Game Theory)既是现代数学的一个新分支,也是运筹学的一个重要学科。 博弈论主要研究公式化了的激励结构间的相互作用。是研究具有斗争或竞争性质现象的数学理论和方法。 博弈论考虑游戏中的个体的预测行为和实际行为,并研究它们的优化策略。生物学家使用博弈理论来理解和预测进化论的某些结果。 博弈论已经成为经济学的标准分析工具之一。在金融学、证券学、生物学、经济学、国际关系、计...

weizexin 765

博弈论初识(一)

部分博弈论的题目考场上真的不可能想出来,就比如威佐夫博弈,其实我们猜出的结论已经很接近了,但还是出现了问题。但无论怎样,遇到博弈论的题目,先打表一定是没有问题的,也希望我们都能通过数据分析得出正确的结论。

Eureka_yzy的博客 703

博弈论总结

最近做的题目看到了博弈论,看见别人做出来了,但是自己无能为力感觉好难受啊,特别是在队伍里面有种用处局限于那么一丢丢考不上的数论的感觉……真的很难过,哎,看完了博弈论就去看别的题目吧,实在受不了一无所知,好像毫无长进的自己了,尤其是看深搜之类的,这种东西就是那种所有人(反正我自己就是不喜欢的)都不喜欢打的代码!还有一些思维题目、很让人眼熟的题目啦~ 博弈论好像是跟dp有关的,所以当初看的时候特别~...

雨潇的博客 743

博弈

(一)巴什博弈(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。 很容易想到当n%(m+1) 这个游戏还可以有一种变相的玩法:两个人轮流报数,每次至少报一个,最多报十个,谁能报到100者胜。 (二)威佐夫博弈(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少

1382

博弈论

巴什博奕:http://acm.hdu.edu.cn/showproblem.php?pid=1846 一堆 n 个物品,两个人,每次最多只能拿走 m 个,先取完胜利; 分析: 1~m 个物品先手胜,m+1个物品后手胜利; 推广: n = (m+1)*r + s,先手只要第一次拿走 s,后手每次也不能拿走(m+1),那么先手只要补上就可以了;也就是说如果 n % (m+1) !=0,先手必...

weixin_30455661的博客 102

博弈论讲解

https://blog.youkuaiyun.com/pengwill97/article/details/76796070#commentBox

A 337

博弈论学习笔记

同步发表于 cnblogs & 优快云博客 1.概念 博弈论 概述:多个人在一定约束条件下,利用已掌握的信息,使自身收益最大化的过程。全是抄的 公平 概述:每个人的操作是不是对等的。比如象棋就是不公平的,因为不能移动别人的棋子 信息对等 概述:每个人所掌握的信息是不是对等的。比如斗地主就是信息不对等的,因为你不知道别人手上的牌 2.经典模型(一) 巴什博弈 题目:有 nnn 个石子,两个人轮流取,每次最多取 mmm 个,最少取 111 个,取完者获胜,问先手有没有必胜策略。 分析:作为大多数人

One_Zzz6174的博客 730

数论篇------博弈论

引语:什么是博弈? 通俗地讲, 博弈就是指游戏中的一种选择策略的研究。在他们都没有失误并采取最优策略后,一定有一个人胜出,在知道初状态及规则的情况下,求解最终必胜的初状态(即何人胜出)的一类问题的理论及方法。 * * 四大博弈:Nim博弈,巴什博弈,斐波那契博弈,威佐夫博弈。 这里的话我们注重讲讲*Nim博弈论*的问题 Nim博弈问题 尼姆博弈指的是这样一个博弈游戏:有任意堆物品,每堆物品的个数是...

weixin_43743711的博客 705
上一篇: 并查集算法
下一篇: 动态规划之0/1背包问题(动态规划入门)
姐姐带你拿捏大厂算法
博客等级 码龄5年 17粉丝 19原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值