| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> Acwing_891集合-Nim游戏【博弈论:sg函数】 -> 正文阅读 |
|
[游戏开发]Acwing_891集合-Nim游戏【博弈论:sg函数】 |
题目描述: 给定n堆石子以及一个由k个不同正整数构成的数字集合S。现在有两位玩家轮流操作,每次操作可以从任意一堆石子中拿取石子,每次拿取的石子数量必须包含于集合S,最后无法进行操作的人视为失败。问如果两人都采用最优策略,先手是否必胜。 输入格式 第一行包含整数k,表示数字集合S中数字的个数。 第二行包含k个整数,其中第i个整数表示数字集合S中的第i个数si。 第三行包含整数n。 第四行包含n个整数,其中第i个整数表示第i堆石子的数量hi。 输出格式 如果先手方必胜,则输出“Yes”。否则,输出“No”。 数据范围 1≤n,k≤100, 输入样例:
输出样例:
思路分析: 本题与一般Nim游戏的不同之处在于每次拿走石子的个数必须是固定值,当不能继续操作时游戏结束。需要先引入一些概念。 公平组合游戏ICG: 若一个游戏满足:
则称该游戏为一个公平组合游戏。 有向图游戏:给定一个有向无环图,图中有一个唯一的起点,在起点上放有一枚棋子。两名玩家交替地把这枚棋子沿有向边进行移动,每次可以移动一步,无法移动者判负。该游戏被称为有向图游戏。 通过上面的定义可知,一般的Nim游戏,相当于对拿取石子不做限制,即每堆石子的状态可以转化为任意比原状态数量少的状态,而集合Nim则减少了有向图游戏的边数,只允许转移到特定的状态。对于Mex运算,Mex(S)表示的是不在S中最小的自然数,比如S = {0,1,2},则Mex(S)= 3。对于SG函数,用下面的图来阐述更为直观: 因此我们可以得出有向图游戏的定理:
本题涉及多个有向图游戏,给出以下概念: 设G1, G2, …, Gm 是m个有向图游戏。定义有向图游戏G,它的行动规则是任选某个有向图游戏Gi,并在Gi上行动一步。G被称为有向图游戏G1, G2, …, Gm的和。 也就是说,只需要将每堆石子数目的sg函数值异或起来,如果非0,则先手必胜,否则必败。 证明与Nim游戏的证明类似: 设SG(G) = SG(G1) ^ SG(G2) ^ … ^ SG(Gm) = x != 0。则一定存在Gi,使得SG(Gi)的第k位也是1,其中k为x二进制表示中最高位的1的位置。故SG(Gi) ^ x < SG(Gi),由于SG(Gi)表示Gi不能到达的最小SG状态,故一定可以到达比SG(Gi)小的任何状态,自然可以到达SG(Gi) ^ x的状态,此时SG(G1) ^ SG(G2) ^ … ^ SG(Gm) ^x = x^x = 0,故异或和为非0的状态一定可以转化为异或和为0的状态。而后手面临的是异或和为0的状态,假设后手将Gi的状态改变为Gi’,使得异或和依然是0,则SG(G1) ^ SG(G2) ^ …^SG(Gi’) ^ …^SG(Gm) = 0,又SG(G1) ^ SG(G2) ^ …^SG(Gi) ^ …^SG(Gm) = 0,将两个等式左右两边分别异或得SG(Gi’) ^ SG(Gi) = 0,故SG(Gi’) = SG(Gi),又SG(Gi)表示Gi不能到达的SG最小的状态是SG(Gi),故SG(Gi’)不可能等于SG(Gi),假设不成立,故任何sg异或和为0的状态都无法转化为sg为0的状态。又最终的必败态是所有SG(Gi) = 0,此时异或和是0,故每堆石子数目的sg函数值异或起来非0,则先手必胜,问题得证。 最后的问题是如何计算SG函数值,可以使用记忆化搜索来做。 AC代码:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/21 23:54:01- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |