\(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. SpringBoot 整合Mybatis + PageHelper 实现分页

    前言: 现在公司大多数都实现了前后端分离,前端使用Vue.React.AngularJS 等框架,不用完全依赖后端.但是如果对于比较小型的项目,没必要前后端分离,而SpringBoot也基本抛弃了Js ...

  2. java8之Stream流处理

    简介 Stream 流处理,首先要澄清的是 java8 中的 Stream 与 I/O 流 InputStream 和 OutputStream 是完全不同的概念. Stream 机制是针对集合迭代器 ...

  3. pyhton 3.6 pip 出现 Fatal error in launcher: Unable to create process using 解决方法

    ERROR:Fatal error in launcher: Unable to create process using '"' 出现这个  打开  终端  输入 python36 -m ...

  4. node学习第一天

    创建服务器 利用require引入http模块:var http=require("http") 利用http模块创建server服务器; 创建服务器:var server=htt ...

  5. Glide:重新加载失败的问题

    Glide在url不变,内容改变的时候重新加载还会显示第一张图片, 解决方法: https://blog.csdn.net/u013420865/article/details/53197788?de ...

  6. 容器centos7安装部署ansible

    容器centos7安装部署ansible centos镜像版本及ansible版本 centos:centos7.5.1804 ansible:2.9.11 启动容器并进入容器 docker run ...

  7. 线程_gevent实现多个视频下载及并发下载

    from gevent import monkey import gevent import urllib.request #有IO操作时,使用patch_all自动切换 monkey.patch_a ...

  8. 线程_Process实例

    from multiprocessing import Process import os from time import sleep def run_proc(name,age,**kwargs) ...

  9. JVM科普

    目录 再看前言 不完美的程序 Java发展史 JVM族谱 什么是广义的虚拟机? 什么是Java虚拟机(JVM)? 二刷周先生的<深入理解JVM>时,没想到已经出了第三版,拿着第二版的我在风 ...

  10. Dynmaics 365 scale group

    关于scale Groups的概念,在看Dynamics crm online的时候,一直不理解缩放组scale group的概念,后来查到GP也在用这个概念,想想不就是动态扩展嘛,马上顿悟了,原来如 ...