博弈论模型总结

博弈论五大模型

前四大模型的深入理解

Bash博弈模型

一堆数量为n的石头,双方轮流每次从堆中取至少1个石头最多m个石头,谁先取完谁赢。

设存在整数k和r使方程**n=k*(m+1)+r**成立,当r==0时先手必败,否则先手必赢。

结论:n%(m+1) == 0, 先手必败

Wythoff博弈模型

两堆数量分别为x、y(x <= y)的石头,每次可以从一堆中取至少一个石头或者从两堆中取同等数量的石头,谁先取完谁赢。

结论:x == floor( (sqrt(5)+1)/2 )*(y-x), 满足等式时先手必败

Nim博弈模型

任意m堆数量任意的石头,每次只能从一堆中获取至少1个石头,谁先取完谁赢

设石头堆Di,Di的异或和k = D1^D2^...^Di,当且仅当k == 0时先手必败,否则先手必赢

结论:D1^D2^...^Di == 0, 先手必败

Fibonacci博弈模型

一堆数量为n的石头,双方轮流从石头堆里取k[i]个石头(1≤k[i]≤2*k[i-1]),先取完的人获胜

当且仅当n不是斐波那契数时,先手必胜,否则先手必败

结论:Fib(n) == false, 先手必胜

SG函数

对sg函数的深入理解

定义: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败。
______ N点:必胜点,处于此情况下,双方操作均正确的情况下必胜。
定义:设mex{S}为集合S中第一个不存在的正整数
定义:设sg(x)为x状态的sg值,sg(x)=mex{S},其中S为x的后继状态的sg值的集合
当sg(x) == 0时, 没有获胜局面,此时处于P点
性质:1、所有终结点的sg值都为0,即sg(0) == 0
______2、无论在N点如何操作,都至少存在一种情况进入P点
______3、无论如何,P节点的后继节点一定是N节点
______4、无论如何只能进入N点的点一定是P点

例题:HDU 1848:Fibonacci again and again

题解:假设只有一堆数量为n的石子

定义sg(x)函数为当前石子数量的sg函数,每次只能取Fib[]数列的数

sg[0] = 0, Fib[] = {1,2,3,5...}

当x == 1时,可以取Fib[1]个石子,剩余0个石子,sg[1] = mex{sg[0]} = mex{0} = 1;

当x == 2时,可以取Fib[2]、Fib[1]个石子,剩余1、0个石子sg[2] = mex{sg[1],sg[0]} = mex{0,1} = 2;

当x == 3时,可以取Fib[3]、Fib[2]、Fib[1]个石子,剩余2、1、0个石子,sg[3] = mex{sg[2],sg[1],sg[0]} = mex{2,1,0} = 3;

当x == 4时,可以取Fib[3]、Fib[2]、Fib[1]个石子,剩余3、2、1个石子,sg[4] = mex{sg[3],sg[2],sg[1]} = mex{3,2,1} = 0;

......

当x == n时,若sg[n] != 0,先手必胜

对于多堆石子,类比Nim游戏:

sg[n]^sg[m]^sg[k] == 0, 先手必败

#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
#include<cmath>
#include<string>
#include<string.h>
#include<queue>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define rep(i, a, b) for(int i=(a); i<(b); i++)
#define sz(a) (int)a.size()
#define de(a) cout<<#a<<" = "<<a<<endl
#define dd(a) cout<<#a<<" = "<<a<<" "
#define be begin
#define en end
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
const int N = 1005;
vi f;
void fib(){f.pb(1), f.pb(1);for(int i = 1;f[i] < N;i++){f.pb(f[i]+f[i-1]);}f.erase(f.begin());
}
int sg[N];
void SG(){vi::iterator it;sg[0] = 0;for(int i = 1;i < N;i++){set<int> q;for(it = f.begin();it != f.end() && *it <= i;it++){q.insert( sg[i-(*it)] );}set<int>::iterator sit = q.begin();int t = 0;for(;sit != q.end();sit++){if(t < *sit) {break;}elset = *sit+1;}sg[i] = t;}
}
int main()
{std::ios::sync_with_stdio(false);std::cin.tie(0);fib();SG();int m,n,p;while(cin >> m >> n >> p){if(m == 0) break;if((sg[m]^sg[n]^sg[p]) == 0) cout << "Nacci" << endl;else cout << "Fibo" << endl;}return 0;
}

转载于:https://www.cnblogs.com/Ace-Monster/p/9415889.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485496.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安全技术可以采用计算机安全,2017年计算机三级《信息安全技术》习题

2017年计算机三级《信息安全技术》习题信息安全技术主要培养熟练掌握网络设备的安装、管理和维护&#xff0c;能分析企业网络和信息系统安全漏洞、及时解决网络安全问题&#xff0c;并能够根据企事业单位业务特点设计制作安全的电子商务/政务网站的专业人员。以下是小编整理的2…

福布斯:14位技术专家预测,未来哪些行业将被AI颠覆?

来源&#xff1a;Forbes转自&#xff1a;新智元未来&#xff0c;哪些行业将从人工智能中受益&#xff1f;14位技术专家对哪些行业和部门最终将从AI中受益最大进行了预测。哪些行业将受益于AI&#xff1f;目前&#xff0c;人工智能和机器学习已进入许多不同的行业&#xff0c;改…

P3195 [HNOI2008]玩具装箱TOY

P3195 [HNOI2008]玩具装箱TOY 题目描述 P教授要去看奥运&#xff0c;但是他舍不下他的玩具&#xff0c;于是他决定把所有的玩具运到北京。他使用自己的压缩器进行压缩&#xff0c;其可以将任意物品变成一堆&#xff0c;再放到一种特殊的一维容器中。P教授有编号为1...N的N件玩具…

Leetcode--671. 合并二叉树

给定两个二叉树&#xff0c;想象当你将它们中的一个覆盖到另一个上时&#xff0c;两个二叉树的一些节点便会重叠。 你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠&#xff0c;那么将他们的值相加作为节点合并后的新值&#xff0c;否则不为 NULL 的节点将直…

吕述望 计算机网络专家,特稿: 中科院吕述望教授:互联网名不符实

国际中华智慧学会创新智慧研究通讯编号&#xff1a;YT-2012-007发布日期&#xff1a;2012年8月28日吕述望教授认为中国互联网名不符实中国香港讯&#xff1a;月前&#xff0c;中国工信部部长隆重宣布&#xff0c;将加快面向全新框架未来互联网的技术研发前沿布局&#xff0c;力…

打开AI芯片的“万能钥匙”

来源&#xff1a;雷锋网 作者&#xff1a;包永刚雷锋网按&#xff0c;新推出的AI芯片因架构的独特性和软件的易用性增加了客户尝试和迁移的成本&#xff0c;因此&#xff0c;软件成为了能否快速、低成本迁移的关键。现在普遍的做法是在TensorFlow写一些后端集成新硬件&#xff…

python2.7 threading RLock/Condition文档翻译 (RLock/Condition详解)

RLock Objects 可重入锁是一个同步原语&#xff0c;它可以被同一个线程多次获取。在内部&#xff0c;除了原始锁使用的锁定/解锁状态之外&#xff0c;它还使用“线程拥有”和“递归级别”的概念。在锁定状态下&#xff0c;某些线程拥有锁&#xff1b;在未锁定状态下&#xff0c…

Leetcode--33. 搜索旋转排序数组

假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如&#xff0c;数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 搜索一个给定的目标值&#xff0c;如果数组中存在这个目标值&#xff0c;则返回它的索引&#xff0c;否则返回 -1 。 你可以假设数组中不存在…

北理计算机教案,北理工版三年级信息技术教案重点.docx

第1单元 初识神奇计算机第1课 神奇电子计算机【教学目的和要求】1、学生了解计算机组成各部分的名称和作用。2、学生知道什么是计算机软件&#xff0c;了解计算机软件的作用。3、学生了解计算机处理信息的过程。4、学会正确启动与关闭计算机。【教学重点】教学难点&#xff1a;…

Leetcode--162. 寻找峰值

峰值元素是指其值大于左右相邻值的元素。 给定一个输入数组 nums&#xff0c;其中 nums[i] ≠ nums[i1]&#xff0c;找到峰值元素并返回其索引。 数组可能包含多个峰值&#xff0c;在这种情况下&#xff0c;返回任何一个峰值所在位置即可。 你可以假设 nums[-1] nums[n] -…

计算机发展历程按什么划分,计算机的发展阶段是按什么划分的

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。计算机的发展阶段是按电子元件划分的&#xff0c;具体阶段如下:1、第1代为电子管数字机( 1946到1958年)。硬件方面,逻辑元件采用的是真空电子管&#xff0c;主存储器采用汞延迟线、阴…

因果推理、正则化上榜:权威专家盘点过去50年最重要的统计学思想

来源&#xff1a;机器学习研究组订阅在日常生活中&#xff0c;统计学无处不在&#xff0c;每个人、每件事似乎都可以使用统计数据加以说明。随着人类迈入大数据时代&#xff0c;统计学在方方面面更是发挥了不可或缺的作用。统计学思想&#xff0c;就是在统计实际工作、统计学理…

Nginx正向与反向代理

Nginx 主要用于反向代理与负载均衡 什么是代理服务器&#xff08;Proxy Serve&#xff09;&#xff1f; 提供代理服务的电脑系统或其它类型的网络终端,代替网络用户去取得网络信息。 为什么使用代理服务器&#xff1f; 提高访问速度 由于目标主机返回的数据会存放在代理服务…

计算机组成原理延迟时间ty,计算机组成原理第6章_5运算方法.ppt

文档介绍&#xff1a;6.5 算术逻辑单元一、ALU 电路四位 ALU 74181M 0 算术运算M 1 逻辑运算S3 ~ S0 不同取值,可做不同运算ALUAiBiFi…SiM位片式运算器4位双极型位片式运算器AM2901,它将ALU、通用寄存器组、多路开关、移位器等逻辑构件集成在一个芯片内。通用寄存器寄存器写…

Leetcode--172. 阶乘后的零

给定一个整数 n&#xff0c;返回 n! 结果尾数中零的数量。 示例 1: 输入: 3 输出: 0 解释: 3! 6, 尾数中没有零。 示例 2: 输入: 5 输出: 1 解释: 5! 120, 尾数中有 1 个零. 说明: 你算法的时间复杂度应为 O(log n) 。 思路&#xff1a; 能出现零的因子里面一定出现2&am…

生命起源的奥秘:分子生物学对生命起源研究

来源&#xff1a; 科学技术哲学1993年加州大学柏克利分校的詹腓力教授邀请了一批科学家、哲学家到加州中部的一个海滨小镇相聚。这些学者来自著名的学术中心&#xff0c;包括剑桥、慕尼黑、芝加哥大学等学府&#xff0c;他们是来质疑一个统治了科学界长达150年的学说。保罗.尼尔…

Python学习第二天

运算符类型&#xff1a; 1.算术运算符 a 10*10 2.赋值运算 a a 1 3.比较运算 a 1 > 5 4.逻辑运算 a 1>6 or 11 5.成员运算 a "文" in "郑建文" 基本数据类型 数字  int 字符串  str 列表  list 元祖  tuple 字典  dict 布尔值  b…

Promise,async和js的事件循环机制

Promise Promise有等待&#xff0c;已成功&#xff0c;失败&#xff0c;三种状态&#xff0c;状态的改变会触发then回调函数和catch回调函数。 当执行一个Promise时&#xff0c;它会立刻返回一个Promise对象&#xff0c;并且不会阻塞后续代码执行。 当Promise的状态发生改变后…

介绍计算机硬件的情景剧表演,手忙脚乱的情景剧

继去年一手操办了女儿班上的元旦迎新会后&#xff0c;昨天&#xff0c;我再一次自编自演自导。不得不说&#xff0c;学校真是磨练人的地方。一、创作剧本的起因半个月前&#xff0c;宋老师推荐我和女儿参加学校举行的亲子诵读比赛。去年也参与过一次&#xff0c;我己经形成了固…

java 双因素认证(2FA)TOTP demo

TOTP 的全称是"基于时间的一次性密码"&#xff08;Time-based One-time Password&#xff09;。它是公认的可靠解决方案&#xff0c;已经写入国际标准 RFC6238。 很早就知道有这个东西了,一直不知道是怎么实现的. 比如 QQ 安全中心的密钥,U盾&#xff0c;就是动态密码…