怎么理解SG函数及性质
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本篇内容主要讲解"怎么理解SG函数及性质",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么理解SG函数及性质"吧!{Sprague-Grundy函数性质所
千家信息网最后更新 2025年11月07日怎么理解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安全错误
数据库的锁怎样保障安全
服务器加小程序
手机网吧服务器怎么改家用
小程序网络安全隐私保护
网络安全意识简报图片
泸州网络技术网上价格
咋运行腾讯云服务器
服务器连接不上体验服
虹口区媒体软件开发信息中心
中华义门陈数据库
网络技术应用前言
黄岛区管理系统软件开发公司
智慧消防平台系统软件开发
杭州蛮牛网络技术有限公司
小迪2020网络安全网盘
软件开发速成班
国三数据库技术怎么学
公司网络安全责任怎么写
邮局软件开发岗
南开大学网络安全学院专业
介绍服务器
大田县公安网络安全建设
大学生软件开发策划书
德惠智能化网络技术服务有哪些
数据库年龄的取值范围
丽水电脑软件开发需要学什么
互联网科技电子名片
句容小许网络技术
数据库中如何删除备注
贵州省自然灾害数据库
网络安全年会