题目:
Alice 和 Bob 再次设计了一款新的石子游戏。现有一行 n 个石子,每个石子都有一个关联的数字表示它的价值。给你一个整数数组 stones ,其中 stones[i] 是第 i 个石子的价值。

Alice 和 Bob 轮流进行自己的回合,Alice 先手。每一回合,玩家需要从 stones 中移除任一石子。

  • 如果玩家移除石子后,导致 所有已移除石子 的价值 总和 可以被 3 整除,那么该玩家就 输掉游戏 。
  • 如果不满足上一条,且移除后没有任何剩余的石子,那么 Bob 将会直接获胜(即便是在 Alice 的回合)。
    假设两位玩家均采用 最佳 决策。如果 Alice 获胜,返回 true ;如果 Bob 获胜,返回 false 。


    思路:
    参考【宫水三叶】题解:https://leetcode-cn.com/problems/stone-game-ix/solution/gong-shui-san-xie-fen-qing-kuang-tao-lun-h1oa/
    下面分类讨论:
    1.s=0的石子数量为偶数,等价于没有s=0的石子
    (1)s=1的石子数量为0,只有s=2的石子可选,则A必败,状态序列(AB分别选择石子后的总和余数状态,从0开始计数,偶数位为A,奇数位为B):2,1,0
    (注:若在此过程中,石子被用光,则B必胜,若未被用光,则B也必胜)
    (2)s=2的石子数量为0,只有s=1的石子可选,则A必败,状态序列:1,2,0
    (3)s=1和s=2均为0,则A必败
    (4)s=1和s=2均不为0,则当两种石子数量均充足时:
  • 若A先选s=1的石子,则石子序列为:1,1,2,1,2,1,2,1,…,
    对应的余数状态序列为:1,2,1,2,1,2,1,2,…,
  • 若A先选s=2的石子,则石子序列为:2,2,1,2,1,2,1,2,…,
    对应的余数状态序列为:2,1,2,1,2,1,2,1,…,
    最佳策略:A应选择数量较少的那一类石子(若两种石子数量相等,选哪种石子都可以),最终 B 会先进入「只能凑成 3 的倍数」的局面导致失败,即 A 必胜。

2.s=0的石子数量为奇数(可等价于只有一个),先手交换
当两种石子数量均充足时:

  • 若先选s=1的石子,则石子序列为:1,0,1,2,1,2,1,2,1,…,
    对应的余数状态序列为:1,1,2,1,2,1,2,1,2,…,
  • 若先选s=2的石子,则石子序列为:2,0,2,1,2,1,2,1,2,…,
    对应的余数状态序列为:2,2,1,2,1,2,1,2,1,…,
    (1) 两者数量差不超过 2:此时 B 可以确保自己为必胜态。
    (2)两者数量差超过 2 :此时A 只要确保第一次选择数量较多的 s,不管 B 是否使用「优先使用 s = 0」的石子,A 都有足够次数数量多 s 来抵消换手(或是在 B 放弃使用 s = 0之后马上使用),最终都是 B 最先遇到「只能凑成 3 的倍数」的局面,即 A 获胜。

解答:

class Solution:def stoneGameIX(self, stones: List[int]) -> bool:n=len(stones)#统计stone%3=0,1,2的个数cnt=[0]*3for stone in stones:cnt[stone%3]+=1if cnt[0]%2==0:if cnt[1]!=0 and cnt[2]!=0:return Trueelse:return Falseelse:if abs(cnt[1]-cnt[2])<=2:return Falseelse:return True

【博弈论】leetcode2029. 石子游戏 IX相关推荐

  1. LeetCode2029. 石子游戏 IX

    相关信息: LeetCode链接: https://leetcode-cn.com/problems/stone-game-ix/ 代码: //作者:LeetCode-Solution public ...

  2. 2029. 石子游戏 IX

    2029. 石子游戏 IX Alice 和 Bob 再次设计了一款新的石子游戏.现有一行 n 个石子,每个石子都有一个关联的数字表示它的价值.给你一个整数数组 stones ,其中 stones[i] ...

  3. 【数据结构与算法】之深入解析“石子游戏IX”的求解思路与算法示例

    一.题目描述 Alice 和 Bob 再次设计了一款新的石子游戏,现有一行 n 个石子,每个石子都有一个关联的数字表示它的价值,给你一个整数数组 stones ,其中 stones[i] 是第 i 个 ...

  4. 2029. 石子游戏 IX(C++解法与思路)

    题目: Alice 和 Bob 再次设计了一款新的石子游戏.现有一行 n 个石子,每个石子都有一个关联的数字表示它的价值.给你一个整数数组 stones ,其中 stones[i] 是第 i 个石子的 ...

  5. 2022.01.20 - 214.石子游戏 IX

    文章目录 1. 题目 2. 思路 (1) 博弈论 3. 代码 1. 题目 2. 思路 (1) 博弈论 只需将石子分成三类即可,即除3余0.1.2的石子,每次累加的和也都对3取余. 若和为0,则游戏直接 ...

  6. leetcode每日一题2029. 石子游戏 IX 博弈相对论 不战而屈人之兵

  7. Leetcode1686. 石子游戏 VI[C++题解]:博弈论、按照a+b贪心

    文章目录 题目分析 题目链接 题目分析 博弈论:最坏情况下求最好. 按a[i]+b[i]a[i] + b[i ]a[i]+b[i] 从大到小排序 解释: (博弈论)每个人最优的选择都是 要求自己的−对 ...

  8. Leetcode1690. 石子游戏 VII[C++题解]:带有博弈论的区间dp

    文章目录 题目分析 状态表示 状态转移 题目链接 题目分析 补充博弈论的做题想法:让最坏情况下最好.在很多决策中,考虑所有的最坏情况,选其中最好的一个. 本题分析: 刚开始因为是个贪心题目,两个人每次 ...

  9. 牛客网CSP-S提高组赛前集训营1题解(仓鼠的石子游戏 [博弈论] + 乃爱与城市的拥挤程度 [树上DP] + 小w的魔术扑克[dfs + 离线])

    文章目录 T1:仓鼠的石子游戏 题目 题解 代码实现 T2:乃爱与城市拥挤程度 题目 题解 代码实现 T3:小w的魔术扑克 题目 题解 代码实现 T1:仓鼠的石子游戏 题目 仓鼠和兔子被禁止玩电脑,无 ...

最新文章

  1. c语言怎样定义函数举例,c语言怎样定义函数?
  2. python实现字符串中中文在前,数字在后且按从小到大排序
  3. SQL Server的WAITFOR DELAY注入
  4. PyTorch基础(12)-- torch.nn.BatchNorm2d()方法
  5. python 统计组合用什么库_Python数据科学,用这些库就够了
  6. spring 事务 配置 多个
  7. 计算机二级C语言操作题评分标准,计算机二级C语言题型和评分标准
  8. WPF游戏,使用move游戏开发
  9. 人才认证+奖金,智能分拣挑战赛baseline助力最后冲刺
  10. 计算机快速切换任务,电脑多任务窗口切换:除了Alt+Tab,你还知道什么?
  11. 理解Promise的3种姿势
  12. 再谈贝叶斯学派与频率学派的区别
  13. python读音有道-centos7安装有道词典(不能发音和取词)
  14. String 尺取法
  15. 使用短生命周期容器(Ephemeral Containers)构建微服务化的工作流
  16. 2021-08-26BERT: Pre-training of Deep Bidirectional Transformers forLanguage Understanding
  17. html页面小宠物代码大全,宠物店网页设计html代码
  18. 矩阵分析与应用学习总结目录
  19. 一键识别图片中的表格数据,并转为Excel
  20. google Chrome 浏览器升级更新了来源策略,导致不同域名来源页面信息【Referer】只有域名信息

热门文章

  1. 玩家八分类法则——四分类法则的进阶
  2. 新年伊始勿忘给保险做个“年检”
  3. 手把手带你用next搭建一个完善的react服务端渲染项目(集成antd、redux、样式解决方案)
  4. 多唱点歌显示微服务器断开,多唱微服务器
  5. Spool Print Fool(CVE-2022-21999 )提权漏洞
  6. 怎样才能让他们改掉“吃野味”的陋习?
  7. HTML静态页面之(盒子模型)
  8. 高德地图点标记及信息窗体的使用
  9. 使用PptxGenJS框架自定义模板生成PPT文件(1)
  10. 批量将多个 PPT 幻灯片文件合并成单个 PPT 文件