| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> leetcode:292.Nim游戏 -> 正文阅读 |
|
[数据结构与算法]leetcode:292.Nim游戏 |
题目来源:力扣(LeetCode) 你和你的朋友,两个人一起玩 Nim 游戏: 桌子上有一堆石头。 示例 1:
示例 2:
示例 3:
提示:
解法博弈论 在不知晓博弈论结论前,可以先通过找规律得到猜想,然后再从「何种情况下,先手会处于必胜态」的角度来进行分析。 根据题意,我们尝试从小范围数据的情况进行讨论: 如果落到先手的局面为「石子数量为 1 - 3」的话,那么先手必胜; 然后我们通过「归纳法」证明一下该猜想的正确性。 在上面的「找规律」分析中,我们分情况讨论了最后一个决胜回合(我们称「剩余石子数量少于等于 4 的局面」为最后回合)的情况:如果交由先手的石子数量为 4,那么先手必败,否则先手必胜。 而对于「最后回合」前的任意回合(石子数量大于 4),我们需要证明 先手可以通过调整所选石子数量,来维持「n % 4 != 0」直到最后回合。 如果起始对先手而言满足「n % 4 != 0」,此时先手可以通过选择石子数量为「n % 4」来确保交到后手的局面为 4 的倍数。 那么根据推论,此时的原始后手作为下一回合的先手角色,且面临石子数量为 4 的倍数的局面,为必败态。 进一步的解释就是,由于原始后手面临石子数量为 4 的倍数的局面,且只能选 1 - 3 个石子,因此无论如何选择,重新回到原始先手的仍然满足「n % 4 != 0」(非 44 的倍数)。 因此 原始先手只需要确保每次都选择「x % 4」个石子(x 为当前石子数量),就可以确保交由自己的局面一直满足「x % 4 != 0」,交由对方的局面一直满足「x % 4 == 0」,直到最后回合的到来。 至此,我们证明了 如果起始石子数量 n 满足「n % 4 != 0」条件,那么先手必胜。
复杂度分析
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年11日历 | -2024/11/26 2:54:13- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |