尼姆博弈的SG值计算简单模板
2016-08-20 09:48
218 查看
#include<cstdio> #include<cstring> using namespace std; #define MAXN 111 int sg[111]; int get_sg(int s){ // 记忆化搜索 if(sg[s]!=-1) return sg[s]; // 不为-1,说明s的sg值已经被计算了,记忆化搜索不用再搜索计算了,直接返回已经算出来的结果 bool vis[MAXN]={0}; // 标记各个数是否被访问过,用于实现mex运算 for(int i=1; i<=s; ++i){ // 枚举取几个石子,转移到下一个局面 vis[get_sg(s-i)]=1; // 标记下一个局面s-i的sg值 } for(int i=0; ; ++i){ // 找到最小的没有被标记的非负整数,就是mex运算的实现 if(!vis[i]){ // 没有被标记 return sg[s]=i; // 当前局面的s的sg值就等于最小的没有被标记的sg值 } } } void get_sg(){ // 从小到大枚举,依次计算SG值 // 同上 for(int s=0; s<MAXN; ++s){ bool vis[MAXN]={0}; for(int i=1; i<=s; ++i){ vis[sg[s-i]]=1; } for(int i=0; ; ++i){ if(!vis[i]){ sg[s]=i; break; } } } } int main(){ memset(sg,-1,sizeof(sg)); for(int i=0; i<MAXN; ++i){ printf("%d ",get_sg(i)); } puts("\n"); get_sg(); for(int i=0; i<MAXN; ++i){ printf("%d ",get_sg(i)); } return 0; }
相关文章推荐
- hdu 1849 Rabbit and Grass SG定理(简单博弈)
- hdu 1847 Good Luck in CET-4 Everybody!(简单博弈SG)
- 博弈论模板(巴什博奕,威佐夫博弈,尼姆博弈,斐波那契博弈)
- 股票系统指标计算的简单模板
- (转)巴氏(bash)威佐夫(Wythoff)尼姆(Nim)博弈之模板
- HDU 1850 Being a Good Boy in Spring Festival(简单 尼姆博弈应用)
- hdu 1850 Being a Good Boy in Spring Festival SG定理(简单博弈)
- 巴氏(bash)威佐夫(Wythoff)尼姆(Nim)博弈之模板
- HDOJ 题目S-Nim(sg-博弈,模板)
- 巴氏(bash)威佐夫(Wythoff)尼姆(Nim)博弈之模板
- 计算几何学简单的模板
- HDOJ 题目1566&题目1544 S-Nim(sg博弈模板)
- HDU 1907 John(尼姆博弈之ANTI-SG游戏)
- 计算几何的简单模板
- POJ2960 S-Nim (sg博弈模板)
- HDU1536 S-nim 尼姆博弈简单题
- HDU - 1847 Good Luck in CET-4 Everybody! 简单博弈 SG打表
- 博弈之——SG模板
- SG博弈简单题
- POJ 2960 博弈-简单SG