怎么理解SG函数及性质
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,本篇内容主要讲解"怎么理解SG函数及性质",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么理解SG函数及性质"吧!{Sprague-Grundy函数性质所
千家信息网最后更新 2025年02月23日怎么理解SG函数及性质
本篇内容主要讲解"怎么理解SG函数及性质",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么理解SG函数及性质"吧!
{
Sprague-Grundy函数性质
所有的终结点SG值为0(因为它的后继集合是空集)
SG为0的顶点,它的所有后继点都满足SG不为0
对于一个SG不为0的顶点,必定存在一个后继满足SG为0
满足组合游戏性质
所有SG为0定点对应P点,SG大于0顶点对应N点
}
hdu1847 Good Luck in CET-4 Everybody!
题意:
总共n张牌,双方轮流抓牌,每人每次抓牌的个数只能是2的幂次(即:1,2,4,8,16…),抓完牌,胜负结果也出来了:最后抓完牌的人为胜者。给出n,问先手赢还是后手赢?
PS:当然这题可以直接推出 n%3==0必败,否则必胜。 //巴什博奕
下面介绍另外一种做法
SG值:一个点的SG值就是一个不等于它的后继点的SG的且大于等于零的最小整数。//同mex()函数
简单点来讲就是当前状态离最近一个必败点的距离。
SG(x)=mex(S)
S是x的后继状态的SG函数值集合
mex(S)表示不在S内的最小非负整数
我们枚举下牌数为0-10的SG值:
num: 0 1 2 3 4 5 6 7 8 9 10
sg值:0 1 2 0 1 2 0 1 2 0 1
#include#include #include using namespace std;const int maxn = 1000 + 10;int arr[11], sg[maxn];void pre() { //把1000以内的所有的可能一次拿的牌都算出来! arr[0] = 1; for(int i=1; i<=10; ++i) arr[i] = arr[i-1]*2;}int mex(int x) { //这是求解该点的sg值的算法函数(采用记忆化搜索) if(sg[x]!=-1) return sg[x]; bool vis[maxn]; memset(vis, false, sizeof vis ); for(int i=0; i<10; ++i) { int temp = x - arr[i]; if(temp<0) break; sg[temp] = mex(temp); vis[sg[temp]] = true; } for(int i=0; ; ++i) { if(!vis[i]) { sg[x] = i; break; } } return sg[x];}int main() { int n; pre(); while(scanf("%d", &n)!=EOF) { memset(sg, -1, sizeof sg ); if(mex(n)) printf("Kiki\n"); else printf("Cici\n"); } return 0;}
到此,相信大家对"怎么理解SG函数及性质"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
函数
性质
后继
顶点
最小
内容
就是
整数
状态
学习
实用
更深
个数
做法
先手
兴趣
双方
后手
定点
实用性
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
海南通用软件开发市场价
云服务器一直同步
飞机订票软件开发
网络安全为人民靠人民主题绘画
酒店行业软件开发对接公安系统
网络安全保密规章
信息数据库怎么用
python工作小软件开发
数据库原理课程要点
2022魔兽休闲服务器
中职学校网络技术培养
魔兽世界血色战场哪个服务器好
本耶德尔红白数据库
计算机网络技术认知报告
ads-b 数据库
大圣游戏软件开发
中级软考数据库2021答案
4g摄像头总是连接服务器失败
网站安全狗会拖慢服务器么
软件开发技术团队最小多少人
机器人需要软件开发吗
空间数据库习题答案
广西鸿业软件开发
战地1怎么管理服务器
网络异常请切换交易服务器
软件开发如何活跃小组气氛
BREENO语音软件开发
乌班图服务器安装分区
5g网络技术哪家强
数据库项目管理师培训