SG函数学习
尼姆博弈就是sg函数的简单体现
学习粗:https://blog.csdn.net/luomingjun12315/article/details/45555495
//f[N]:可改变当前状态的方式,N为方式的种类,f[N]要在getSG之前先预处理
//SG[]:0~n的SG函数值
//S[]:为x后继状态的集合
int f[N],SG[MAXN],S[MAXN];
void getSG(int n){
int i,j;
memset(SG,0,sizeof(SG));
//因为SG[0]始终等于0,所以i从1开始
for(i = 1; i <= n; i++){
//每一次都要将上一状态 的 后继集合 重置
memset(S,0,sizeof(S));
for(j = 0; f[j] <= i && j <= N; j++)
S[SG[i-f[j]]] = 1; //将后继状态的SG函数值进行标记
for(j = 0;; j++) if(!S[j]){ //查询当前后继状态SG值中最小的非零值
SG[i] = j;
break;
}
} }
题:http://acm.hdu.edu.cn/showproblem.php?pid=1536
分析,对石子堆打表出sg函数
异或和要求只能去的数
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=;
int s[],sg[N+],f[];
void getsg(int n){
sg[]=;
for(int i=;i<N;i++){
memset(s,,sizeof(s));
for(int j=;f[j]<=i&&j<=n;j++){
s[sg[i-f[j]]]=;
}
for(int j=;j<N;j++){
if(!s[j]){
sg[i]=j;
break;
}
}
}
}
int main(){
int k;
while(scanf("%d",&k)!=EOF){
if(k==)
break;
for(int i=;i<=k;i++)
scanf("%d",&f[i]);
sort(f+,f++k);
getsg(k);
int t;
scanf("%d",&t);
while(t--){
int n;
scanf("%d",&n);
int ans=;
for(int x,i=;i<=n;i++){
scanf("%d",&x);
ans^=sg[x];
}
if(ans)
printf("W");
else
printf("L"); } printf("\n");
}
return ;
}
题:http://acm.hdu.edu.cn/showproblem.php?pid=5724
由状压得来的sg函数。
题意:n*20的棋盘,给你n行,每行m个,每位选手把棋子移到右边第一个空的位置,移不动则输,问先手是否必赢
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define pb push_back
const int M=1e3+;
int sg[<<];
int sta[];
void init(){ for(int i=;i<(<<);i++){
memset(sta,,sizeof(sta));
for(int j=;j>=;j--)
if(i&(<<j)){
for(int k=j-;k>=;k--){
if(!(i&(<<k))){
sta[sg[i^(<<k)^(<<j)]]=;
break;
}
}
} for(int j=;j<=;j++)
if(sta[j]==){
sg[i]=j;
break;
}
}
}
int main(){
init();
int t;
scanf("%d",&t);
while(t--){
int n;
int ans=;
scanf("%d",&n);
for(int i=;i<=n;i++){
int m;
int sign=;
scanf("%d",&m);
while(m--){
int x;
scanf("%d",&x);
sign|=<<(-x);
}
ans^=sg[sign]; }
if(ans)
puts("YES");
else
puts("NO");
}
return ;
}
SG函数学习的更多相关文章
- SG函数学习总结
有点散乱, 将就着看吧. 首先是博弈论的基础, 即 N 和 P 两种状态: N 为必胜状态, P 为必败状态. 对于N, P两种状态, 则有 1. 没有任何合法操作的状态, P; 2. 可以移动到P局 ...
- SG 函数学习
\(Mex\) 运算 \(mex(S)\) 为不属于集合 \(S\) 的最小非负整数,即: \[mex(S)=\min \limits_{x \in \mathbb{N},x \not\in S} \ ...
- 学习笔记--博弈组合-SG函数
fye学姐的测试唯一的水题.... SG函数是一种游戏图每个节点的评估函数 具体定义为: mex(minimal excludant)是定义在整数集合上的操作.它的自变量是任意整数集合,函数值是不属于 ...
- HDU 1536 sg函数
S-Nim Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- hdu-------(1848)Fibonacci again and again(sg函数版的尼姆博弈)
Fibonacci again and again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- 【转】博弈问题及SG函数(真的很经典)
博弈问题若你想仔细学习博弈论,我强烈推荐加利福尼亚大学的Thomas S. Ferguson教授精心撰写并免费提供的这份教材,它使我受益太多.(如果你的英文水平不足以阅读它,我只能说,恐怕你还没到需要 ...
- (转)博弈问题与SG函数
博弈问题若你想仔细学习博弈论,我强烈推荐加利福尼亚大学的Thomas S. Ferguson教授精心撰写并免费提供的这份教材,它使我受益太多.(如果你的英文水平不足以阅读它,我只能说,恐怕你还没到需要 ...
- 博弈论进阶之SG函数
SG函数 个人理解:SG函数是人们在研究博弈论的道路上迈出的重要一步,它把许多杂乱无章的博弈游戏通过某种规则结合在了一起,使得一类普遍的博弈问题得到了解决. 从SG函数开始,我们不再是单纯的同过找规律 ...
- 博弈论初步(SG函数)
讲解见此博客https://blog.csdn.net/strangedbly/article/details/51137432 理解Nim博弈,基于Nim博弈理解SG函数的含义和作用. 学习求解SG ...
随机推荐
- sqlcook sql经典实例 emp dept 创建语句
创建表语句 create table dept( deptno int primary key, dname varchar(30), loc varchar(30) ); create table ...
- MFC下的网络编程(1)CAsyncSocket进行无连接(UDP)通信
服务器端发送数据给客户端 先看服务器端: CAsyncSocket m_sockSend; //声明一个Socket对象 点击发送数据后,执行下面这些动作 ...
- 关于mysql/apache/nginx的配置文件配置
2015.5.12 mysql中可以通过函数查看用户列表/查看当前用户以及删除用户,方法百度之,忘了 /etc/php5/fpm/php.ini memory_limit修改之前为128M apach ...
- Jshint 安装方法
首先在编辑器中搜索扩展程序 "Jshint" 并安装,安装成功后 打开Javascript文件会出现报错提示: "Failed to load jshint librar ...
- HDU 3018 欧拉回路
HDU - 3018 Ant Country consist of N towns.There are M roads connecting the towns. Ant Tony,together ...
- 32. docker swarm 集群服务通信 之 RoutingMesh - internal 网络
1. 两个 service 是如何通信的 通过内置的 DNS 服务发现的功能 相互通信的 2. 创建一个 overlay 的 网络 docker network create -d overlay ...
- 28. docker swarm 容器编排简介
1.采用集群架构 集群架构包含节点和角色 docker 节点中 包含 worker 和 manager 两个角色 manager 相当于 swarm 集群的 大脑 是用来管理配置节点的 (避免单点故 ...
- share团队冲刺7
团队冲刺第七天 昨天:加入activity的内容,和队友的代码进行整合实现部分按钮功能 今天:继续完善代码,完善其他页面的功能,对主页和发表页面进行开发 问题:无
- art-template常用总结
高性能JavaScript模板引擎原理解析:http://cdc.tencent.com/2012/06/15/%E9%AB%98%E6%80%A7%E8%83%BDjavascript%E6%A8% ...
- javaweb学习——会话技术(二)
文中部分借鉴了:https://www.cnblogs.com/xdp-gacl/p/3855702.html https://blog.csdn.net/p744174529/article/det ...