题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1188一道非常好的SG函数题,加深了对博弈论的理解。以前做的SG函数的题,都是每个瓶子看成一个子游戏,但这里不同,这里是将“每一个豆子”都看成一个子游戏。SG[i]表示在瓶子i的“每一个豆子”的S...
分类:
其他好文 时间:
2015-07-18 12:24:45
阅读次数:
119
sg(Sprague-Grundy)函数
sg值:一个点的SG值就是一个不等于它的后继点的SG的且大于等于零的最小整数。
后继点:也就是按照题目要求的走法,能够走一步达到的那个点。
sg函数值的性质:
sg(x)==0 必败点
sg(x)>0 必胜点
求单个sg函数值
int sg[MAXN];
int get_sg(int x, int n){
if(sg[x]!=-...
分类:
其他好文 时间:
2015-07-10 22:23:31
阅读次数:
241
这是尼姆博弈的变型;
还是博弈,但是这次要用Sg函数最后异或等于0后手赢
反之,先手赢#include
#include
#include
using namespace std;
int f[100]={1,2,3,5};
int e[1005]={0,1,2,3};
int b[16];
void Init()
{
for(...
分类:
其他好文 时间:
2015-06-11 23:00:24
阅读次数:
165
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3895看这题感觉好神。SG函数,dp。。。。好像都不行呀。最后去膜拜题解发现记忆化搜索 囧那我就直接上他的做法了。假设每堆石子的数量都大于1那么我们定义操作数b为当前石子总数+当前堆数-1若b为奇...
分类:
其他好文 时间:
2015-06-03 21:26:37
阅读次数:
143
现在换是看不明白SG函数的求法什么的
暂时先当模板题吧
函数mex1就是求g(x)
然后异或
#include
#include
#include
#include
using namespace std;
int k,fibo[100],f[10001];
int mex1(int p){
int i,t;
bool g[101]={0};
for(i=0;i<k...
分类:
其他好文 时间:
2015-06-02 23:34:00
阅读次数:
415
题意:有n个盒子,每个盒子可以放一定量的石头,盒子中可能已经有了部分石头。假设石头无限,每次可以往任意一个盒子中放石头,可以加的数量不得超过该盒中已有石头数量的平方k^2,即至少放1个,至多放k^2个。思路:跟常规nim的区别就是加了个限制“每次加的量不超平方”。盒子容量上限是100万,那么就不能直...
分类:
其他好文 时间:
2015-05-20 20:31:44
阅读次数:
156
题意:给出几堆石子数量,每次可以取走一堆中任意数量的石头,也可以将一堆分成两堆,而不取。最后取走者胜。思路:石子数量很大,不能直接算,sg打表找出规律:正常情况下a[i]=i,但是有例外的,就是i%4=0和i%4=3的sg值是交换了的,所以要算某个状态的sg值时,若模4为0,则进行自减,若模4为3则...
分类:
其他好文 时间:
2015-05-19 18:56:13
阅读次数:
106
题意:给出几堆石子数量,每次可以取走一堆中任意数量的石头,也可以将一堆分成两堆,而不取。最后取走者胜。思路:先规矩地计算出sg值,再对每个数量查SG值就可以了。最后求异或和。 1 #include 2 using namespace std; 3 const int N=105, limit=20....
分类:
其他好文 时间:
2015-05-19 18:35:50
阅读次数:
100
SG函数的定义:g(x) = mex ( sg(y) |y是x的后继结点 )其中mex(x)(x是一个自然是集合)函数是x关于自然数集合的补集中的最小值,比如x={0,1,2,4,6} 则mex(x)=3;什么是后继结点?所谓后继结点就是当前结点经过一个操作可以变成的状态。比如对于取4石子游戏,假如...
分类:
其他好文 时间:
2015-05-09 18:47:03
阅读次数:
236