\(Mex\) 运算

\(mex(S)\) 为不属于集合 \(S\) 的最小非负整数,即:

\[mex(S)=\min \limits_{x \in \mathbb{N},x \not\in S} \{x\}
\]

eg:\(mex(\{2,4,5\})=3,mex(\{\})=0\)

有向图游戏

有向无环图中,一颗棋子放在起点,双方轮流将这枚棋子沿有向边移动,不能移动则输

博弈论问题可转化为有向图游戏

\(SG\) 函数

在有向图游戏中,定义 \(SG(x)\) 为 \(x\) 节点的后继节点 \(y_1,y_2,...,y_n\) 的 SG 值组成的集合的 Mex,即:

\[SG(x)=mex(\{SG(y_1),SG(y_2),...,SG(y_n)\})
\]

一个有向图游戏 \(G\) 的 SG 值为起点的 SG 值

SG 定理

由 n 个有向图游戏组成的游戏的 SG 值为所有子游戏 \(G_1,G_2,...,G_n\) 的 SG 值的异或值,即

\[SG(G)=SG(G_1) \ xor \ SG(G_2) \ xor \ ... \ xor \ SG(G_n)
\]

例题

hdu1847

SG 函数模板

/************************************************
*Author : lrj124
*Created Time : 2020.08.14.10:38
*Mail : 1584634848@qq.com
*Problem : hdu1847
************************************************/
#include <cstring>
#include <cstdio>
const int maxn = 1000 + 10;
int f[maxn],sg[maxn];
bool vis[maxn];
inline void get_sg() {
for (int i = 1;i < maxn;i++) {
memset(vis,false,sizeof vis);
for (int j = 1;j <= f[0] && i-f[j] >= 0;j++) vis[sg[i-f[j]]] = true;
for (int j = 0;;j++) if (!vis[j]) { sg[i] = j; break;}
}
}
int main() {
freopen("hdu1847.in","r",stdin);
freopen("hdu1847.out","w",stdout);
for (int i = 1;i < maxn;i <<= 1) f[++f[0]] = i;
get_sg();
for (int n;scanf("%d",&n) ^ EOF;puts(sg[n] ? "Kiki" : "Cici"));
return 0;
}

SG 函数学习的更多相关文章

  1. SG函数学习

    尼姆博弈就是sg函数的简单体现 学习粗:https://blog.csdn.net/luomingjun12315/article/details/45555495 //f[N]:可改变当前状态的方式 ...

  2. SG函数学习总结

    有点散乱, 将就着看吧. 首先是博弈论的基础, 即 N 和 P 两种状态: N 为必胜状态, P 为必败状态. 对于N, P两种状态, 则有 1. 没有任何合法操作的状态, P; 2. 可以移动到P局 ...

  3. 学习笔记--博弈组合-SG函数

    fye学姐的测试唯一的水题.... SG函数是一种游戏图每个节点的评估函数 具体定义为: mex(minimal excludant)是定义在整数集合上的操作.它的自变量是任意整数集合,函数值是不属于 ...

  4. HDU 1536 sg函数

    S-Nim Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  5. hdu-------(1848)Fibonacci again and again(sg函数版的尼姆博弈)

    Fibonacci again and again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Jav ...

  6. 【转】博弈问题及SG函数(真的很经典)

    博弈问题若你想仔细学习博弈论,我强烈推荐加利福尼亚大学的Thomas S. Ferguson教授精心撰写并免费提供的这份教材,它使我受益太多.(如果你的英文水平不足以阅读它,我只能说,恐怕你还没到需要 ...

  7. (转)博弈问题与SG函数

    博弈问题若你想仔细学习博弈论,我强烈推荐加利福尼亚大学的Thomas S. Ferguson教授精心撰写并免费提供的这份教材,它使我受益太多.(如果你的英文水平不足以阅读它,我只能说,恐怕你还没到需要 ...

  8. 博弈论进阶之SG函数

    SG函数 个人理解:SG函数是人们在研究博弈论的道路上迈出的重要一步,它把许多杂乱无章的博弈游戏通过某种规则结合在了一起,使得一类普遍的博弈问题得到了解决. 从SG函数开始,我们不再是单纯的同过找规律 ...

  9. 博弈论初步(SG函数)

    讲解见此博客https://blog.csdn.net/strangedbly/article/details/51137432 理解Nim博弈,基于Nim博弈理解SG函数的含义和作用. 学习求解SG ...

随机推荐

  1. 利用CloudFlare自动DDNS

    注意要 仅限 DNS 获取咱的Key https://dash.cloudflare.com/profile 先在控制面板找到咱的目前IP,然后到Cloudflare中新建一个A记录,如:ddns.y ...

  2. JAVA 实现将多目录多层级文件打成ZIP包后保留层级目录下载 ZIP压缩 下载

    将文件夹保留目录打包为 ZIP 压缩包并下载 上周做了一个需求,要求将数据库保存的 html 界面取出后将服务器下的css和js文件一起打包压缩为ZIP文件,返回给前台:在数据库中保存的是html标签 ...

  3. git pull 放弃本地修改, 全部使用远端代码

    git强制覆盖:    git fetch --all    git reset --hard origin/master    git pull git强制覆盖本地命令(单条执行):    git ...

  4. C#串模板

    c# 6.0 的语言特性,功能类似string.formate,更方便的地方在于不要像format一样使用索引,可以直接使用变量. 使用方法如下: string name = "zhangs ...

  5. html头文件设置常用之<meta>设置

    也许很多开发人员并没有重视meta标签,我就是其中一个,但是meta标签的功能很强大,下面就来说说meta标签! <meta http-equiv="pragma" cont ...

  6. Python后端日常操作之在Django中「强行」使用MVVM设计模式

    扫盲 首先带大家了解一下什么是MVVM模式: 什么是MVVM?MVVM是Model-View-ViewModel的缩写. MVVM是MVC的增强版,实质上和MVC没有本质区别,只是代码的位置变动而已 ...

  7. Debug LinkedList

    Debug LinkedList源码 前置知识 LinkedList基于链表,LinkedList的Node节点定义 成员变量 //链表中元素的数量 transient int size = 0; / ...

  8. centos7 离线安装paramiko

    离线安装paramiko   1. 利用yum下载paramiko依赖的rpm软件包 安装yum-utils yum -y install yum-utils yumdownloader python ...

  9. date 常用格式化输出

    date "+%Y-%m-%d" 2013-02-19 date "+%H:%M:%S" 13:13:59 date "+%Y-%m-%d %H:%M ...

  10. RHEL7配置ip地址

    通过修改ifcfg-eno16777728配置文件来修改配置ip 网卡命令格式:eno16777728 en:代表enthernet(以太网) o:代表onboard(内置) 16777728:是主板 ...