博弈论(nim游戏,SG函数)】的更多相关文章

小H和小Z正在玩一个取石子游戏. 取石子游戏的规则是这样的,每个人每次可以从一堆石子中取出若干个石子,每次取石子的个数有限制,谁不能取石子时就会输掉游戏. 小H先进行操作,他想问你他是否有必胜策略,如果有,第一步如何取石子. N≤10 Ai≤1000 裸SG函数啊 然而我连SG函数都不会求了,WA了一会儿之后照别人代码改发现vis公用了... #include <iostream> #include <cstdio> #include <cstring> #includ…
http://poj.org/problem?id=3533 变成三维的nim积..前面hdu那个算二维nim积的题的函数都不用改,多nim积一次就过了...longlong似乎不必要但是还是加上了 代码 #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<iostream> #include<map> #include<…
在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念:        P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败.        N点:必胜点,处于此情况下,双方操作均正确的情况下必胜. 必胜点和必败点的性质:         1.所有终结点是 必败点 P .(我们以此为基本前提进行推理,换句话说,我们以此为假设)         2.从任何必胜点N 操作,至少有一种方式可以进入必败点 P.         3.无论如何操作,必败点P 都…
在算法竞赛中,博弈论题目往往是以icg.通俗的说就是两人交替操作,每步都各自合法,合法性与选手无关,只与游戏有关.往往我们需要求解在某一个游戏或几个游戏中的某个状态下,先手或后手谁会胜利的问题.就比如经典的:几堆石子,两人可以分别拿若干个,一次只能选择一个石子堆操作,问给定状态下,先手胜利还是后手胜利? 而nim与sg函数就是对于这类问题的解法,在我的理解看来,sg函数和nim分别对应不同阶段的决策:前者对于单个游戏决策,后着是将这些单个游戏综合起来的整体决策. 一.状态与转移 icg游戏往往可…
SG函数 个人理解:SG函数是人们在研究博弈论的道路上迈出的重要一步,它把许多杂乱无章的博弈游戏通过某种规则结合在了一起,使得一类普遍的博弈问题得到了解决. 从SG函数开始,我们不再是单纯的同过找规律等方法去解决博弈问题,而是需要学习一些博弈论中基本的定理,来找到他们的共同特点 那么就先介绍几个最基本的定理(也可以叫常识)吧 基本定理 ICG游戏 1.游戏有两个人参与,二者轮流做出决策.且这两个人的决策都对自己最有利. 2.当有一人无法做出决策时游戏结束,无法做出决策的人输.无论二者如何做出决策…
传送门 拿到这道题就知道是典型的博弈论,但是却不知道怎么设计它的SG函数.看了解析一类组合游戏这篇论文之后才知道这道题应该怎么做. 这道题需要奇特的模型转换.即把每一个石子当做一堆石子,且原来在第i堆的石子(从0开始标号)的石子个数为n-i-1,这样题目就转化成了每次取一堆石子,并放回两个比这一堆的石子个数少的石堆.这样,我们就可以有序的递推sg函数值了. 即: sg(i)=mex({sg[j]  xor  sg[k]}) 其中j≤i且k≤i #include <cstdio> #define…
讲解见此博客https://blog.csdn.net/strangedbly/article/details/51137432 理解Nim博弈,基于Nim博弈理解SG函数的含义和作用. 学习求解SG函数的各种方法 SG函数求解博弈问题速讲 对于一个问题,我们把每一个局面抽象为一个点,那么局面的变化就可以抽象为点之间的有向边. 定义mex为一个集合中未出现的最小的非负数,SG函数g(x)=mex( g(y) ) y为x的所有后继节点. 一个游戏如果有若干个子游戏,每次只能操作其中一个,则游戏的S…
题意:针对Nim博弈,给定上一个集合,然后下面有 m 个询问,每个询问有 x 堆石子 ,问你每次只能从某一个堆中取出 y 个石子,并且这个 y 必须属于给定的集合,问你先手胜还是负. 析:一个很简单的博弈,对于每组数据,要先处理出SG函数, 然后使用组合游戏和来解决就ok了,对于求sg函数,很明显,就是求所有的mex,也就是未出现过的最小自然数.最后取异或就ok了. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000"…
Nim or not Nim? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 623    Accepted Submission(s): 288 Problem Description Nim is a two-player mathematic game of strategy in which players take turns…
哎,被卡科技了,想了三个小时,最后还是大佬给我说是\(SG\)函数. \(SG\)函数,用起来很简单,证明呢?(不可能的,这辈子都是不可能的) \(SG\)定理 游戏的\(SG\)函数就是各个子游戏的\(SG\)函数的\(Nim-sum\)(就是异或和),比如多堆石子的\(SG\)函数就是所有单堆石子\(SG\)函数的异或和. \(SG\)函数 首先定义\(mex(T)\)为\(T\)中未出现的自然数中最小的数,其中\(T \subset N\),如\(mex(0,2,3)=1\),\(mex(…