count({x, y})) return mp[{x, y}]; set<int> st; //枚举所有后继状态,递归求得该状态SG函数的值 for(int i = 1; i < x; ++i) st.insert(sg(x - i, i)); for(int i = 1; i < y; ++i) st.insert(sg(i, y - i)); return mp[{x, y}] = mex(st); } void solve()...
1#include<unordered_set>2#include<cstring>3#include<iostream>4usingnamespacestd;5constintN=110;6intf[N];7intsg(intx){8if(f[x]!=-1)returnf[x];9unordered_set<int>S;10for(inti=0;i<x;i++){11for(intj=0;j<=i;j++){12S.insert(sg(i)^sg(j));13}14}15for(inti=0;;i++){1...
前面我们说了,SG函数和SG定理可以解决一大类的博弈问题。这一大类的博弈问题称为ICG游戏,我们之前介绍过的三种博弈模型,本质上都属于ICG游戏。 关于ICG游戏,它的定义如下,需要满足三个条件: 游戏有两人参与,两人轮流做出决策,并且两人做出的决策都是对自己最优的 当有一人无法决策的时候,该人失败。无论两人如何决...
博弈论 _ SG函数 定义 SG函数是指:在有向图中,对于每个节点x,设从xx出发共有kk条有向边(直接相连的边),分别达到节点y1,y2……yky1,y2……yk, 定义SG(x)SG(x)为xx的后继节点的SGSG值构成的集合执行mex()mex()运算后的值 mex():mex():设集合S是一个非负整数集合,mex(S)就是求不属于S的最小...
博弈论sg函数 博弈论中的SG函数是一种用来解决游戏的必胜必败问题的工具。SG函数的值表示了当前游戏状态下的必胜必败情况,可以用来判断当前玩家是否有必胜策略。 SG函数的计算方法比较复杂,需要通过数学计算来得出。首先需要定义游戏的状态,然后通过递归的方式计算出每个状态的SG函数值,再通过异或运算得出整个游戏的SG...
博弈论之SG函数,参考自《算法竞赛进阶指南》$NIM$博弈:$n$堆物品,第$i$堆物品有$A_i$个。两名玩家轮流行动,每次可以任选一堆,取走任意多个物品,可把一堆取光,但不能不取。取走最后一件物品的人获胜。假设两人每一步都必然采取最优的策略。问先手是否必胜。定理:若先
SG函数 SG函数可以理解为一个用于表示博弈图中节点状态的一个函数。同时sg(x) = n还表示节点x的出点构成一个集合{y | 0 <= sg(y) <= n - 1},也就是说x可以到达所有sg小于它自己的sg的点。 就比如上图,我们规定必败态的sg = 0,必胜态的sg != 0。于是我们可以知道sg(0) = 0,然后往回推。
大意:n堆石子,每次可以从其中一堆取出1-k个,k是不大于该堆石子个数一半的数字。不能取的人输。求解两人博弈结果。 分析: 每一堆石子的个数可达到1e9。计算每一个sg函数存储下来肯定不行,所有打表找找sg结果的规律。 打表sg[i]: 0]=0; sg[1]=0; ...
在我小时候以前做题的时候,遇到博弈题往往都是漫无目的地打表找规律,或者找一些特殊情况但是没有很好的分析方法。 其实博弈题是有比较套路的解题方法的,那就是利用SG函数,第一节不会讲到SG函数的具体用法,我们先来博弈入个门,学习一下最基本的博弈类型:Nim游戏。
博弈论模板 一。巴什博弈 只是最简单的博弈了,只简单说一下满足条件,一堆总数为n个,每次可以取1-m个石头。 核心是n=(m+1)*r+s;也就是说用n%(m+1) 判断是否等于0即可。 例题:hdu 1846 巴什博弈 [html] view plain copy int main() { &n......