关于sg函数:http://www.cnblogs.com/Knuth/archive/2009/09/05/1561007.html

题目链接:http://poj.org/problem?id=2311

思路:

就我而言,首先遇到的第一个问题就是抽象不出博主在《Game theory初步》(在前面那个网址的基础上向前找博主的前几篇博客就可以找到)这篇中讲的ICG(公平组合游戏)模型,因为如果纸片出现了1*1就结束了,而其他的纸片却不一定都是1*1的纸片,如果我们把一个纸片抽象成一个游戏图上的点,也就是说有些点还可以决策,但游戏却已经结束了,这明显和ICG的定义是违背的。

后来看了dicuss之后恍然大悟,对于任意一个选手来讲,肯定不会优先生成1*n或者n*1的纸片,因为下一轮对方就可以取胜,因此,如果这样不断的剪下去的话,最终肯定有一个局面都是3*2、2*3、2*2的纸片,实际上这时就可以断定输赢了,同时如果我们把3*2、2*3、2*2都看成终止状态的话,就巧妙避免了上面所提到的问题,因为这样游戏终止时不会有尚未决策的点。

单单解决完上一个问题还是不够的,接下来我又遇到了另一个问题,就是之前只做过一些裸的类似Nim游戏的题目,这些题目很容易将游戏转化成图游戏(即一个或若干个棋子初始时在某些特定的位置,每次将一个棋子通过一条有向边移到另一个位置,当所有棋子都不能移动的时候,游戏就终止了),但这个问题就不一样了,如果我们将一个w*h的纸片看做点(w,h),假如一种切的方式是生成(a,b)和(c,d)两个纸片,那岂不成了当一个棋子在(w,h)这个点的时候,有一种决策是让这个棋子分裂成两个棋子,其中一个移到(a,b),另一个移到(c,d)么?这要怎么搞呢?我瞬间就晕了……

结果今天早晨起床的时候却突然悟到了一些,实际上也主要是这时思考的时候就把游戏和的概念联系起来一起思考了。对于位于(w,h)这个位置的棋子而言,如果变成两个分别位于(a,b)和(c,d)的棋子,这两个棋子是不能各自看成(w,h)的后继的,因为后继之间应该是相互独立的,即既可以通过决策到达其中一个位置,也可以通过决策到达另一个位置,所以我们要将这两个棋子合起来考虑,共同看成是(w,h)的一个后继。同时结合游戏和的一些知识,(a,b)以及(c,d)是不是可以看成(w,h)的两个子游戏呢?当然可以,因为后面无论是对(a,b)还是(c,d)进行决策,都合对(w,h)进行决策的规则是一样的。那么对于(a,b)和(c,d)共同看成一个后继来讲,这个后继的SG函数值就应该是SG(a,b)^SG(c,d)。

至此为止,我们就终于把这个剪纸片问题化归成和一些简单的Nim游戏类似的形式了,其余的求解过程就和一些简单的Nim游戏的求解过程一样了。

以上内容摘自博客:http://www.cnblogs.com/staginner/archive/2012/02/26/2368417.html

代码:

 #include <stdio.h>
#include <string.h>
#define MAXN 210
using namespace std; int sg[MAXN][MAXN]; int dfs(int x, int y){
int vis[MAXN];
memset(vis, , sizeof(vis));
if(sg[x][y]!=-){//当前点已经走过
return sg[x][y];
}
for(int i=; i<=x-i; i++){//如果遍历到1,2的状态则必输,求赢自然可以从3开始遍历
vis[dfs(i, y)^dfs(x-i, y)]=;//母图可以由子图异或得到
}
for(int i=; i<=y-i; i++){
vis[dfs(x, i)^dfs(x, y-i)]=;
}
for(int i=; ; i++){
if(vis[i]==){//求mex值
sg[x][y]=sg[y][x]=i;
return i;
}
}
} int main(void){
int n, m;
memset(sg, -, sizeof(sg));
sg[][]=sg[][]=sg[][]=;//必输状态
while(~scanf("%d%d", &n, &m)){
if(dfs(n, m)){
puts("WIN");
}else{
puts("LOSE");
}
}
return ;
}

poj2133(sg函数)的更多相关文章

  1. HDU 5795 A Simple Nim 打表求SG函数的规律

    A Simple Nim Problem Description   Two players take turns picking candies from n heaps,the player wh ...

  2. 【转】博弈—SG函数

    转自:http://chensmiles.blog.163.com/blog/static/12146399120104644141326/ http://blog.csdn.net/xiaofeng ...

  3. HDU 1848 Fibonacci again and again【SG函数】

    对于Nim博弈,任何奇异局势(a,b,c)都有a^b^c=0. 延伸: 任何奇异局势(a1, a2,… an)都满足 a1^a2^…^an=0 首先定义mex(minimal excludant)运算 ...

  4. POJ2425 A Chess Game[博弈论 SG函数]

    A Chess Game Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 3917   Accepted: 1596 Desc ...

  5. bzoj1188 [HNOI2007]分裂游戏 博弈论 sg函数的应用

    1188: [HNOI2007]分裂游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 973  Solved: 599[Submit][Status ...

  6. BZOJ1188 [HNOI2007]分裂游戏(SG函数)

    传送门 拿到这道题就知道是典型的博弈论,但是却不知道怎么设计它的SG函数.看了解析一类组合游戏这篇论文之后才知道这道题应该怎么做. 这道题需要奇特的模型转换.即把每一个石子当做一堆石子,且原来在第i堆 ...

  7. sg函数与博弈论2

    参考链接: http://blog.sina.com.cn/s/blog_51cea4040100h3l9.html 这篇主要就是讲anti-sg.multi-sg和every-sg的. 例1 poj ...

  8. sg函数与博弈论

    这个标题是不是看起来很厉害呢... 我们首先来看一个最简单的游戏.比如我现在有一堆石子,有p个,每次可以取走若干个(不能不取),不能取的人就输了. 现在假设有两个人要玩这个游戏,一个人先手,一个人后手 ...

  9. hdu1536&&hdu3023 SG函数模板及其运用

    S-Nim Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Status ...

随机推荐

  1. 九度OJ 1105:字符串的反码 (翻译)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4929 解决:1529 题目描述: 一个二进制数,将其每一位取反,称之为这个数的反码.下面我们定义一个字符的反码.如果这是一个小写字符,则它 ...

  2. The server must be started under an unprivileged user ID to prevent

    mysql8 PostgreSQL [root@test local]# postgres -D /usr/local/pgsql/data"root" execution of ...

  3. eclipse中怎么删除重复的console

    eclipse中不同的应用会开启不同的console,所以并不是重复. 如图: Terminate标志/操作按钮,可以停止当前的执行,以及标志此Console是Terminated状态: Remove ...

  4. Tomcat设置虚拟文件夹

    需求 在做B/S的应用时.常常会遇到一个问题,站点上传的一些图片不是保存在应用server以下.而是保存在别的文件夹,可是页面中又需要能訪问到这些图片.这时,应用server的"虚拟文件夹& ...

  5. ubuntu 16.04安装Jenkins

    快速安装: sudo wget -q -O - http://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add - sudo ...

  6. EF 编程经验

    http://blog.csdn.net/itmaxin/article/details/47662151 这篇文章里有一下东西可以参考,但是弟二个方法明显是不可行的,因为我做了实验直接attach ...

  7. 3个CCIE考官对一个高级工程师的面试题

    3个CCIE考官对一个高级工程师的面试题 转载 时间:2015-7-10 原文转载: 1.现在的6509及7609,SUP720交换带宽去到720G,是不是可以说7609/6509 可以取代一部分GS ...

  8. Codeforces Round #222 (Div. 1) Maze —— dfs(连通块)

    题目链接:http://codeforces.com/problemset/problem/377/A 题解: 有tot个空格(输入时统计),把其中k个空格变为wall,问怎么变才能使得剩下的空格依然 ...

  9. MSP430G2553需要注意的一些参数

    转载请注明出处:http://www.cnblogs.com/connorzx/p/3632952.html 把一些具体芯片信息列出来,以便于查看. 1.时钟 (1)MCLK,Master Clock ...

  10. H264 各种profile

    关键字:H264 ,base profile, main profile, extend profile, high profile. 提到High Profile H.264解码许多人并不了解,那么 ...