【算法基础】博弈论入门:基础博弈论模型与SG函数基础详解(洛谷 P2197 C++代码)
📅 2026/7/14 19:43:03
👁️ 次浏览
博弈论是算法竞赛里一个很重要的考点。但如果没有具体了解过解决博弈论的工具和方法面对此类问题还是会很容易束手无策。下面我们先可以看一道具体的题目有一堆石头数量为 8 双方每次都可以拿取最多 3 颗石头至少要拿一个石头当一个人无法再拿石头的时候则输。假设双方都会做出最优选择其中一方先手他最后是会输还是赢我们稍作尝试就能很容易发现解法。我们首先要承认一点的是如果双方都会做最优选择那任何一种状态都会是先手必胜或者先手必败其中一种则有如下推理。显然如果石头数量为 1,2,3 这种情况下先手必胜如果数量为 4 我们取 1 则剩 3取 2 则剩 2 取 3 则剩 1 此时到对方他必定全部取走石头那我们先手必败如果数量为 5 我们取 1 剩下 4取 2 剩下 3 取 3 剩下 2 但我们会做出最优选择取 2 和 3 对方都会全部拿走那我们就输了而取 1 剩下 4 那又回到数量为 4 的状态了我们刚刚已经知道状态为 4 则必输所以我们当然会直接取 1 让对方输此时先手必胜。以此类推到数量为 8 很好发现每个数量的石头状态规律如下。以 N 代表先手必胜必胜态以 P 代表先手必败必败态。其实很好发现规律如果石头数量为 n 每次最多可以拿 m 个石头则n%(m1)0 时是必败态反之为必胜态。这就是最简单基础的博弈论模型巴什博弈Bash Game。但是现实情况题目往往不会给我们这么简单的博弈模型会更加复杂难懂。我们如果每次都推导每一种情况的必胜态必败态不仅麻烦几乎做不到而且大部分情况我们无法总结出来一个类似巴什博弈一样的公式规律。所以我们需要一个专门解决博弈论问题的工具SG函数。在说明SG函数之前我们还需要了解 mex 计算。mex 计算的大致定义就是对于数字 $A_1$,$A_2$, ... ,$A_n$ mex{$A_1$,$A_2$, ... ,$A_n$} 的值就是这些数字里没有出现的最小非负整数。比如 mex{1,3,4}0 mex{0,1,3,5}2 mex{0,2,3,4}1。而SG函数值的定义是对于当前情况 A 的 SG 值为 SG(A) 且通过操作可以去到情况 $A_1$,$A_2$, ... ,$A_n$ 则 SG(A)mex{SG($A_1$),SG($A_2$), ... ,SG($A_n$)}。最重要的一点是经过验证SG函数值是与必胜态和必败态相关的对应当前情况 A 如果 SG(A)0 则 A 此时为必败态反之则是必胜态。证明过程比较抽象且繁琐所以我们只用记住结论懂得利用SG函数来推导博弈必败必胜态即可。SG函数的计算很可能一时间难以理解下面我通过对刚刚的巴什博弈的简单计算SG 值来让大家熟悉这个计算过程。首先可以肯定的是 SG(0)0 即对于 0 颗石头先手就拿不了了则必败为必败态。随后如下1颗石头SG(1)mex{SG(0)}12颗石头SG(2)mex{SG(0),SG(1)}23颗石头SG(3)mex{SG(0),SG(1),SG(2)}34颗石头SG(4)mex{SG(1),SG(2),SG(3)}05颗石头SG(5)mex{SG(2),SG(3),SG(4)}16颗石头SG(6)mex{SG(3),SG(4),SG(5)}27颗石头SG(7)mex(SG(4),SG(5),SG(6))38颗石头SG(8)mex{SG(5),SG(6),SG(7)}0可以发现我们刚刚总结的规律n%(m1) 其实本质上还是 SG 值只是在 SG 值中找出了规律而已。到现在想必大家已经掌握了计算 SG 函数值来判断必胜必败态了。我们接下来可以看一个也比较经典的模型尼姆博弈Nim Game。洛谷题目链接P2197 【模板】Nim 游戏 - 洛谷看完这个题目其实可以发现这道题的主要让人无从下手的是它这次不止有一堆石头了而是 n 堆可我们只知道怎么分析一堆的局面类似巴什博弈 n 堆的状态简直太复杂了我们直接对整体石头进行计算 SG 值无法得出答案。所以我们首先要知道一个结论对于由 n 个互不关联的子博弈组成的整体博弈这 n 个子博弈的 SG 值的异或和即是整体博弈的 SG 值。由此判断整体的 SG 值即可而互不关联则是子博弈两两 SG 值互不影响。显而易见对于一堆石头的 SG 值肯定不会影响另一堆因为每次取石头只能在同一堆取所以在这题尼姆博弈中我们只需要计算单独每一堆石头的 SG 值再计算其异或和就能得到答案了。而单堆石头的 SG 值也很好算。假设石头有 n 颗由于是可以取任意颗石头所以可得SG(0)0SG(1)mex{SG(0)}1SG(2)mex{SG(0),SG(1)}2SG(3)mex{SG(0),SG(1),SG(2)}3······SG(n)mex(SG(0),SG(1),SG(2),...,SG(n-1))n最终能发现每堆石头的 SG 值其实就是它本身石头数量。知道了 SG 值我们再进行异或和就能得到总博弈的 SG 值可以判断是否能必胜了。具体代码很简单。#include bits/stdc.h using namespace std; using lllong long; int t; int main() { ios::sync_with_stdio(false); cin.tie(0); cint; while(t--) { int n; cinn; int ans; cinans; for(int i2;in;i) { int t; cint; ansans^t;//计算异或和 } //判断总博弈的SG值 if(ans) coutYes\n; else coutNo\n; } }所以了解了 SG 值我们就有办法去具体有思路地分析博弈论题目而不是每次无头苍蝇一般随意分析各种情况最后搞得晕头转向。希望大家通过本文能基本入门博弈论懂得利用 SG 函数来分析。
一、基础信息中文全称:N 端生物素修饰人成熟 32 肽脑钠肽英文全称:Biotinyl-Brain Natriuretic Peptide-32 (human)三字母序列:Biotin-Ser-Pro-Lys-Met-Val-Gln-Gly-Ser-Gly-Cys-Phe-Gly-Arg-Lys-Met-Asp-Arg-Ile-Ser-Ser-Ser-Ser-Gly-Leu-Gl…
📅 2026/7/14 19:43:03
如果你正在寻找 (G)I-DLE 的《Lion》MV 4K 版本,这篇文章可能不是你要找的。但如果你想知道为什么一个看似简单的 MV 观看需求,背后却涉及复杂的技术实现和版权保护机制,那么接下来的内容值得你仔细阅读。在数字媒体技术快速发展的今天&#…
📅 2026/7/14 19:43:03
更多请点击:
https://kaifayun.com
第一章:为什么你的ChatGPT行程总漏掉退税点?揭秘地理语义理解偏差与3层校验机制(附2024Q2最新API兼容性清单) 当用户输入“帮我规划巴黎三天行程,含免税购物和退税点”时…
📅 2026/7/14 19:43:03
如何快速实现Visual Studio项目向Qt跨平台迁移:vs2qt在OpenEuler生态系统中的完整指南 【免费下载链接】vs2qt vs trans to qt and so on. 项目地址: https://gitcode.com/openeuler/vs2qt
前往项目官网免费下载:https://ar.openeuler.org/ar/
在…
📅 2026/7/14 20:38:20
那天早上,我正对着电脑屏幕发呆——Hacker News 上又有几条热门技术新闻想看,但手动点开、翻译、总结再发给自己,这套流程已经重复了快一个月。就在我准备写第 N 个爬虫脚本时,同事扔过来一句话:“试试 Hermes Agent 吧…
📅 2026/7/14 20:38:20
随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代…
📅 2026/7/14 20:38:20
这次我们来看一个名为"躲在超市后门抽烟的两人"的Netflix正式预告片。从标题来看,这应该是一部即将在Netflix平台上映的影视作品,但从技术角度分析,这个标题背后可能涉及视频内容分析、预告片自动生成、影视推荐算法等多个技术领域…
📅 2026/7/14 20:38:20
随着信息化时代的到来,系统管理都趋向于智能化、系统化,文化遗产网站也不例外,但目前国内的文化产业仍然都使用人工管理,文化产业规模越来越大,同时信息量也越来越庞大,人工管理显然已无法应对时代的变化&a…
📅 2026/7/14 20:38:20
1. 项目概述:为什么我们需要std::future?在C的世界里,尤其是当你从基础语法迈向构建高性能、响应迅速的实际应用时,多线程编程是绕不开的一道坎。但传统的多线程模型,比如直接使用std::thread,常常伴随着一…
📅 2026/7/14 20:37:20
从“创始人投影”到“真理映射”——大语言模型认知本质的哲学批判与范式重构
摘要
当前全球主流大语言模型(LLMs)在技术指标上持续突破,却在认知本质上陷入了一种根本性的“搞反”状态:它们本应成为人类超越自身认知局限的“传…
📅 2026/7/14 0:00:05
Hadoop 3.2.2 JDK 21 Windows开发环境全流程实战指南对于需要在Windows环境下进行大数据开发的Java/Scala开发者来说,搭建一个本地Hadoop开发环境是入门的第一步。本文将带你从零开始,完成Hadoop 3.2.2与JDK 21的环境搭建,并实现一个完整的M…
📅 2026/7/14 0:00:05
1. 项目概述:为什么你需要Boost库? 如果你用C写过一些项目,尤其是涉及到网络、并发、文件系统或者需要处理一些复杂数据结构时,大概率会听过或者用过Boost库。它不是C标准库的一部分,但它在C社区的地位,几…
📅 2026/7/14 0:00:05
豆包openclaw最近圈子里都在聊豆包openclaw,我也没忍住,掏腰包入手了一套。说实话,刚拿到手的时候,心里是打鼓的。毕竟市面上类似的智能硬件太多了,有的吹得天花乱坠,用起来却是一堆bug。为了不让大家的钱打水漂,我连续用了半个月。从开箱到日常高频使用,甚至故意测试它…
📅 2026/7/14 6:35:02
SQLyog 13.3.1 社区版在Windows 10/11上的完整安装与连接指南 对于刚接触MySQL数据库管理的开发者和学生来说,选择一个直观易用的图形化管理工具至关重要。SQLyog作为一款轻量级但功能强大的MySQL GUI工具,能够显著提升数据库操作的效率和体验。本文将详…
📅 2026/7/14 12:06:52
SPEC CPU 2006 跨平台基准测试深度实战:ARM/X86/MIPS 架构配置优化与结果分析方法论在当今多元化的计算架构时代,如何客观评估不同处理器平台的真实性能成为系统工程师和性能优化专家的核心挑战。SPEC CPU 2006 作为业界公认的计算密集型基准测试套件&am…
📅 2026/7/14 7:15:18
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/14 15:11:56
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/13 19:47:36
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/14 15:11:56