数学——博弈论

博弈论的数学语言 博弈论采用标准化的数学符号体系精确描述博弈要素与均衡解。核心符号包括:参与者集合$N$、策略集$S_i$和策略组合$S$、收益函数$u_i$;混合策略$\Delta(S_i)$和期望收益$U_i$;以及纳什均衡的严格定义条件。该体系具有精确性(区分策略级别)、普适性(适用各类博弈)和可计算性(支持数学求解),是分析博弈结构与均衡的理论基础。例如单人博弈可通过$N={1}$、$u_1(s)=-操作次数$等符号转化为标准博弈模型。 阅读详情

推荐四道比较好的博弈论题目和sg函数题目,如下:

Fibonacci again and again

杭电oj经典题

分析:整个游戏由三堆独立的石子组成。我们可以分别分析只有一堆石子的情况,然后将结果合并。定理指出,整个游戏的 SG 值是各个独立子游戏 SG 值的 异或 (XOR) 和。 即:SG(m, n, p) = SG(m) XOR SG(n) XOR SG(p)

#include <bits/stdc++.h>

using namespace std;

const int N = 20, M = 1010;

int fib[N], sg[M];

void init()
{
    fib[0] = 1;
    fib[1] = 1;
    for (int i = 2; i < N; i++)
    {
        fib[i] = fib[i - 1] + fib[i - 2];
        if (fib[i] > M)
        {
            fib[i] = 0;
            break;
        }
    }
    sg[0] = 0;
    for (int i = 1; i < M; i++)
    {
        map<int, int> vis;
        for (int j = 0; fib[j] <= i && fib[j] != 0; j++)
        {
            vis[sg[i - fib[j]]] = 1;
        }
        int mex = 0;
        while (vis[mex])
            mex++;
        sg[i] = mex;
    }
}

int main()
{
    init();
    int m, n, q;
    while(cin >> m >> n >> q &&(  m!= 0 || n != 0 || q != 0 )){
        int ans = sg[m] ^ sg[n] ^ sg[q];
        if (!ans)
            cout << "Nacci" << endl;
        else
            cout << "Fibo" << endl;
    }
    return 0;
}

C. Battle

知识点:sg函数

2023江西省赛C题。

p 是奇数时,sg(x) = x % 2。为什么呢?

  • 手推一下可以发现 sg 值就是 0, 1, 0, 1, 0, 1... 这样交替出现的。这个序列正好就是 x % 2。所以,当 p 是奇数时,sg(x) 就等于 x 的奇偶性。

当 p 是偶数时,代码的逻辑是

ans ^= sg(x % (p + 1));

这表明,sg(x) 函数的值是周期性的,周期为 p+1。我们只需要分析 x 在 0 到 p 之间的情况。

如何发现 sg(x) 是以 p+1 为周期的特性呢?

方法一:打表找规律

在信息学竞赛中,当遇到一个看似复杂的数学或博弈问题时,如果问题的规模不大(比如此题的 x 我们可以先研究到 100 左右),最有效的方法就是“打表”——写一个简单的程序,计算出小数据范围内的所有 sg 值,然后观察它们的规律。

让我们来模拟这个过程:

  1. 选择一个小的偶数 p,比如 p = 2。

  2. 写一个暴力程序计算 sg 值。

    • 可用的操作是取走 {1, 2, 4, 8, ...} 个石子。

    • sg(0) = 0

    • sg(1) = mex{ sg(0) } = mex{0} = 1

    • sg(2) = mex{ sg(1), sg(0) } = mex{1, 0} = 2

    • sg(3) = mex{ sg(2), sg(1) } = mex{2, 1} = 0

    • sg(4) = mex{ sg(3), sg(2), sg(0) } = mex{0, 2, 0} = mex{0, 2} = 1

    • sg(5) = mex{ sg(4), sg(3), sg(1) } = mex{1, 0, 1} = mex{0, 1} = 2

    • sg(6) = mex{ sg(5), sg(4), sg(2) } = mex{2, 1, 2} = mex{1, 2} = 0

  3. 观察输出的 sg 值序列: 0, 1, 2, 0, 1, 2, 0, 1, 2, ...

  4. 发现规律: 我们立刻就能看到,这个序列是以 0, 1, 2 的形式循环的,周期是 3。而我们选的 p=2,周期恰好是 p+1。

  5. 验证猜想: 再选一个偶数,比如 p = 4。

    • 可用的操作是取走 {1, 4, 16, ...} 个石子。

    • sg(0) = 0

    • sg(1) = mex{ sg(0) } = 1

    • sg(2) = mex{ sg(1) } = 0

    • sg(3) = mex{ sg(2) } = 1

    • sg(4) = mex{ sg(3), sg(0) } = mex{1, 0} = 2

    • sg(5) = mex{ sg(4), sg(1) } = mex{2, 1} = 0

    • sg(6) = mex{ sg(5), sg(2) } = mex{0, 0} = 1

    • sg(7) = mex{ sg(6), sg(3) } = mex{1, 1} = 0

    • sg(8) = mex{ sg(7), sg(4) } = mex{0, 2} = 1

    • sg(9) = mex{ sg(8), sg(5) } = mex{1, 0} = 2

  6. 观察输出的 sg 值序列: 0, 1, 0, 1, 2, 0, 1, 0, 1, 2, ... 这个序列是以 0, 1, 0, 1, 2 循环的,周期是 5。而我们选的 p=4,周期恰好是 p+1。

方法二:数学性质分析
  1. 关键恒等式: p ≡ -1 (mod p+1)。这是显然的,因为 p+1 除以 p+1 余 0,所以 p 除以 p+1 余 p 或者说余 -1。

  2. 分析操作对 mod (p+1) 的影响: 我们看看每次取走 p^k 个石子,会让石子数 x 在模 p+1 的意义下发生什么变化。

    • 当 k=0,取走 p^0 = 1。x 变为 x-1。在模 p+1 意义下,x 减了 1。

    • 当 k 是奇数时,p^k ≡ (-1)^k ≡ -1 (mod p+1)。取走 p^k 个石子,在模 p+1 意义下,相当于 x - (-1) = x + 1。

    • 当 k 是偶数且 k>0 时,p^k ≡ (-1)^k ≡ 1 (mod p+1)。取走 p^k 个石子,在模 p+1 意义下,相当于 x - 1。

  3. 发现核心结构: 无论你执行哪种操作(取走 p^k),石子数 x 在模 p+1 意义下,要么加 1,要么减 1。

  4. 得出结论: sg(x) 的值是由 sg(x - p^k) 决定的。而我们刚刚发现,x - p^k 在模 p+1 意义下的值,与 x 在模 p+1 意义下的值有非常紧密的联系(只相差 1)。 这意味着,sg(x) 的计算所依赖的那些 sg 值,它们的下标在模 p+1 意义下都与 x mod (p+1) 相关。 换句话说,sg(x) 的计算方式,只取决于 x mod (p+1) 的值。这就证明了 sg 函数必然以 p+1 为周期。

#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
#define x first
#define y second
#define ll long long
#define PII pair<int, int>
ll n, p;
int sg(int x)
{
    if (x == p)
        return 2;
    if (x & 1)
        return 1;
    return 0;
}
void solve()
{

    cin >> n >> p;
    ll ans = 0;
    for (int i = 0; i < n; i++)
    {
        ll x;
        cin >> x;
        if (p & 1)
        {
            ans ^= (x % 2);
            // cout << "ans = " << ans << endl;
        }
        else
        {
            ans ^= sg(x % (p + 1));
        }
    }
    // cout << ans << endl;
    if( ans )
        cout << "GOOD" << endl;
    else
        cout << "BAD" << endl;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    solve();
    return 0;
}

J. Just another Sorting Problem

2024昆明区域赛简单题

知识点:分类博弈

分析:经验题,自然可以看出n = 2 , n = 3是两个特殊的情况需要拿出来考虑,其他的n >= 4只要不能让A一次获胜就B胜。

#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
#define x first
#define y second
#define ll long long
#define PII pair<int, int>

// 选择 两个相邻的位置 交换 pi 和  pj
void solve()
{
    int n;
    string name;
    cin >> n >> name;
    vector<int> a(n + 1);
    int cnt = 0;
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
        if (i != a[i])
            cnt++;
    }
    // 升序 aiice 获胜
    // 只有两个 数字不在指定的位置
    if(n == 2){
        cout << "Alice" << endl;
        return;
    }
    if(n == 3){
        if(cnt == 3){
            if(name == "Bob")
                cout << "Alice" << endl;
            else
                cout << "Bob" << endl;
        }else if(cnt == 0 ){
            if(name == "Bob"){
                cout << "Alice" << endl;
            }else{
                cout << "Bob" << endl;
            }
        }else{
            if(name == "Bob"){
                cout << "Bob" << endl;
            }else
            {
                    cout << "Alice" << endl;
            }
        }
        return;
    }

    if (cnt == 2 && name == "Alice")
        cout << "Alice" << endl;
    else
        cout << "Bob" << endl;

}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int t;
    cin >> t;
    while (t--)
        solve();
    return 0;
}

A Multiplication Game

杭电oj经典题目

分析:

p从1开始,每次乘2~9,所以2~9是先手必胜的。然后9~18,是先手必败。19~18*9是先手必胜,同样,18*9+1~18*2*9是先手必败。

容易看出,是以18为规律的,除18,最后看在那个区间。

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    double n;
    while (cin >> n)
    {
        while (n > 18)
        {
            n = n / 18;
        }
        if (n <= 9)
        {
            cout << "Stan wins." << endl;
        }
        else
        {
            cout << "Ollie wins." << endl;
        }
    }
    return 0;
}

数学与博弈论的完美结合:10个必知的核心公式 本文旨在为读者揭示数学与博弈论结合的魅力,通过介绍10个关键公式,让读者理解博弈论中策略选择、均衡分析等核心概念,范围涵盖博弈论基础公式到经典模型中的公式。首先引入博弈论的概念,讲解核心公式所涉及的基础概念及相互关系,随后详细阐述10个核心公式的原理、数学模型、代码示例以及应用场景,最后探讨未来发展趋势并进行总结。博弈论:研究多个参与者在相互影响的决策过程中,如何选择策略以实现自身利益最大化的理论。就像下象棋,双方都要根据对方的走法来决定自己的下一步,争取赢棋。策略:参与者在博弈过程中可以采取的行动方案。 阅读详情

相关推荐

数学领域内博弈论的实用价值剖析

博弈论作为数学领域的重要分支,其目的在于研究在冲突与合作情境下,参与者如何做出最优决策。本文章的范围将涵盖博弈论的基本概念、算法原理、数学模型,以及其在经济、政治、生物等多个领域的实际应用,旨在全面剖析博弈论在现实世界中的实用价值。本文将按照以下结构展开:首先介绍博弈论的核心概念和相关联系,通过文本示意图和Mermaid流程图进行直观展示;接着阐述博弈论的核心算法原理和具体操作步骤,并使用Python源代码详细说明;然后介绍博弈论的数学模型和公式,通过具体例子进行深入讲解;

AI天才研究院 1126

博弈论的理论和题目

博弈论问题大致分为,公平组合游戏、非公平组合游戏(绝大多数的棋类游戏)、反常游戏只需要关注公平组合游戏,反常游戏是公平组合游戏的变形。以下为公平组合游戏的特征:1.两个玩家轮流行动且游戏方式一致。2.两个玩家对状况完全了解3.游戏一定会在有限步数内分出胜负4.游戏以玩家无法行动结束一共有n颗石头,两个人轮流拿,每次可以拿1~m颗石子,拿到最后一颗石子的人获胜,根据n,m,返回谁赢。分析:显然,如果 n = m + 1那么由于一次最多只能取 m 个物品,所以无论先取者拿走多少个,后取者都能够一次拿走剩余的物品

2301_80610560的博客 1605

博弈论:自然界的策略数学

《博弈论:自然界的策略数学》 关键词:博弈论,策略数学,自然选择,进化算法,行为决策,群智能 博弈论是一种研究个体在竞争和合作情境下做出决策的数学理论。其核心在于通过分析参与者的策略选择和结果,寻找最优解。而策略数学则是一门将数学模型应用于决策

AI天才研究院 829

从一道ACM题看博弈论:当Alice和Bob开始‘吃瓜’比赛时,到底谁更占便宜?

本文通过一道ACM题目探讨博弈论中的策略对抗,分析Alice和Bob在'吃瓜比赛'中的先手优势、模仿策略和临界点分析。文章揭示了完全信息动态博弈模型在实际开发中的应用,如资源竞争、任务调度和网络协议设计,帮助读者理解博弈思维在技术场景中的价值。

weixin_42530458的博客 400

进阶教程:从理论到实践——博弈论在数学建模中的运用

2023年9月数学建模国赛期间提供ABCDE题思路加Matlab代码(限100份),专栏链接(赛前一个月恢复源码199,欢迎大家订阅):http://t.csdn.cn/Um9Zd博弈论是研究理性决策者(也称为玩家)在某种情况下如何进行策略选择的数学理论。在经济学、社会学、政治学、心理学等许多领域中,博弈论都有广泛的应用。在数学建模中,博弈论可以帮助我们理解和解决许多复杂的问题。本文将通过MATLAB代码和具体的案例研究,深入探讨博弈论在数学建模中的运用。

YOLO 519

博弈论在数学领域的策略群体行为研究

本文旨在系统性地介绍博弈论在数学领域中对策略群体行为的研究。我们将涵盖博弈论的基本概念、数学模型、核心算法以及实际应用,为读者提供一个全面而深入的理解框架。文章将从基础概念开始,逐步深入到数学模型和算法实现,最后探讨实际应用和未来趋势。每个部分都将包含详细的解释和示例,确保读者能够循序渐进地理解这一复杂主题。博弈论(Game Theory): 研究理性决策者之间策略互动的数学理论玩家(Player): 博弈中的决策主体策略(Strategy): 玩家在博弈中可选择的行动方案收益(Payoff)

AI天才研究院 503

蓝桥杯练习题——博弈论

1.必胜态后继至少存在一个必败态2.必败态后继均为必胜态。

qq_62734493的博客 1585

备战2025数学建模国赛(算法29):博弈论在数学建模竞赛中的应用

博弈论为数学建模竞赛提供了强大的分析工具,尤其适用于涉及多方互动决策的问题。本文介绍了博弈论的核心模型、算法实现及竞赛应用案例,并提供了完整的Python代码实现。扩展阅读方向不完全信息博弈与贝叶斯均衡合作博弈与联盟形成机制设计与拍卖理论随机博弈与马尔可夫决策过程博弈论与机器学习的结合。

YOLO 442

博弈论

三个简单的博弈论入门题 硬币游戏1: 题 意:Alice和Bob在玩这样一个游戏,给定k个数字,a1,a2,…,ak。一开始,有x枚硬币,Alice和Bob轮流取硬币。每次取的硬币个数一定是a1,a2…ak中的一个数,保证有一个ai等于1.问双方都在最优的策略下谁能获胜。 数据范围: 1&amp;lt;=x&amp;lt;=1e41&amp;lt;=x&amp;lt;=1e41&lt;=x&lt;...

子灬丶逾 344

25、熵、博弈论与基础数学知识解析

本文探讨了熵、博弈论以及基础数学工具的核心概念及其相互关联。首先介绍了熵在系统不确定性中的作用及其与完美泛化的联系;接着系统阐述了博弈论的基本原理,特别是矩阵博弈中的纳什均衡和混合策略;并通过实例解析了鞍点法、高斯积分、Jensen不等式等数学工具在博弈论和复杂系统中的应用。文章还分析了这些理论在经济学、社会学、计算机科学等领域的实际意义,提出了未来研究的拓展方向。

y2z3a4b5c的博客 157

Python 实战人工智能数学基础:博弈论

1.背景介绍 博弈论(Game Theory)是一门关于影响个人、组织及社会的决策的数学科目,通常指两个或多个参与者之间进行的一种互动游戏。博弈论研究的是如何在多人竞争环境下做出最佳选择,达到共赢的目的。根据博弈论的理念和方法论,通过仔细分析问题、制定计划并加以协调,可以预测和评估事物的发展结果。 它对理解算法、市场机制、资源分配、合作博

AI天才研究院 196

【算法】博弈论(C/C++)

在算法竞赛中,博弈论算法常用于解决涉及对抗、策略选择、最优决策等问题。这类问题通常涉及两名或多名玩家在某种规则下的竞争,而每个玩家试图通过选择最优策略获胜。常见的博弈论问题类型包括零和博弈、格局游戏(如Nim博弈)、棋类游戏以及其他涉及策略选择的问题。

闻道有先后,术业有专攻 1万+

博弈论在数学建模中的实践应用指南

在博弈论的世界里,个体并非在孤立的环境中做出决策,而是与其它参与者互动,这种互动常常涉及到策略选择和结果的预测。博弈论是研究理性决策者之间冲突与合作的数学理论和分析工具。纳什均衡是博弈论中的核心概念,由数学家约翰·纳什提出。在纳什均衡状态下,每一个参与者都选择了自己的最佳策略,并且没有动机单方面地改变自己的策略,因为这样做不会增加他们的收益。简单来说,纳什均衡是一种稳定的状态,每个参与者的策略都是针对其他参与者的最佳反应。数学上,纳什均衡可以通过迭代消除严格劣策略来找到。

weixin_31641077的博客 1473

数学建模之博弈论

警察同时逮捕了两人并分开关押,逮捕的原因是他们持有大量伪币,警方怀疑他们伪造钱币,但没有找到充分证据,希望他们能自己供认,这两个 人都知道:如果他们双方都不供认,将被以持有大量伪币罪被各判刑 18 个月;对策论发展 的历史并不长,但由于它所研究的现象与人们的政治、经济、军事活动乃至一般的日常 生活等有着密切的联系,并且处理问题的方法又有明显特色。博弈论简单讲就是,A采取措施影响B的行为,B的行为影响A的决策,两者来回博弈,最终达到一个动态平衡。例如:有两堆石子,第一堆有2个,第二堆有3个,先手必胜。

minzufuxing1949的博客 1063

博弈论复习题及答案.pdf

博弈论复习题及答案.pdf

在Ansys Mechanical中对磨损进行建模

在有限元分析中,磨损是通过移动接触表面上的节点来复制材料侵蚀来建模的。仿真迭代更新几何,并在每次更新后重新计算平衡,使过程成为非线性的。Ansys使用将压力、相对运动和材料阻力与表面损失联系起来的经验定律来处理连续介质尺度的磨损。要在Ansys Mechanical中激活磨损建模,必须使用TB,WEAR命令定义专用材料模型。该命令与 TBDATA 相结合,允许用户输入与磨损相关的材料常数,以控制磨损的计算方式以及在接触表面上的应用方式。

jkh920184196的博客 2629

组合数学 算法导论 具体数学 博弈论 计算机科学数学

组合数学[清华大学] https://www.bilibili.com/video/BV1sW411V7RU 15日掌握《具体数学》第1天学习直播实况记录(2019.5.27) https://www.bilibili.com/video/BV1M4411W7AM 高德纳谈《具体数学》的诞生 https://www.bilibili.com/video/BV1hT4y1J73i 高德纳 Donald Knuth Algorithms, Complexity, Life, and ACP

青少年趣味编程 1397

告别轮询!用STM32CubeMX给STM32F030配置ADC多通道+DMA,实测代码分享

本文详细介绍了如何使用STM32CubeMX为STM32F030配置ADC多通道采集与DMA传输,显著提升采集效率。通过实测对比轮询与DMA模式的性能差异,提供完整的代码实现和优化技巧,帮助开发者快速掌握这一高效采集方案。

weixin_42570296的博客 410

信奥中的数学:博弈论

第7章 博弈论(《信息学奥赛一本通 提高篇》第6部分 数学基础) 例1 取石子游戏 取石子游戏(hdu1527 博弈) - 寻找&星空の孩子 - 博客园 取石子游戏_whiterbear的专栏-优快云博客 【计蒜客习题】取石子游戏 - Mr^Kevin - 博客园 一本通1663【 例 1】取石子游戏 1 - 人间不值の - 博客园 1663:【 例 1】取石子游戏 1 信息学奥赛一本通(C++版)在线评测系统 一本通1663【 例 1】取石子游戏 1 - 人间不值の - 博客

青少年趣味编程 803

从零配置到批量处理:FaceFusion 3.1完整使用指南(含hififace_256模型测试)

本文详细介绍了FaceFusion 3.1的完整使用指南,包括环境配置、模型选择(特别是hififace_256模型的深度测试)以及批量处理技巧。通过AI驱动的脸部替换技术,帮助用户高效实现高质量的面部处理,适用于影视制作、广告设计等多种场景。

weixin_29056865的博客 655

fast-lio运行步骤(使用velodyne数据)

使用fast-lio运行velodyne数据

ericdowney 4769

博弈论书籍及信奥中的数学之博弈论

1、1分钟漫画博弈论 谈判推理思维能力生存策略励志成功经管经济理论书(2020.11)2、离不开的数学——数学中的博弈思维3、马丁·加德纳数学游戏全集:博弈论与纸牌游戏(2020.07)4、妙趣横生博弈论:事业与人生的成功之道(珍藏版)-2022.045、图画通识丛书:博弈论(2020.01)6、博弈论:事业与人生的成功之道(全彩美绘插画版,成功励志系列)-2019.057、博弈论(2022.05)8、博弈论9、博弈论(2020.07)10、博弈论(2018.10)

青少年趣味编程 674

RAP 时代的 Service Binding:把 CDS 业务服务稳稳地“插”到 OData 里

本文深入解析SAP ABAP开发中的关键对象Service Binding,阐述了如何通过三层架构(数据模型、服务定义、服务绑定)实现业务逻辑与协议分离。文章重点分析了Service Binding的核心参数配置,包括服务命名规范、协议类型选择(OData V2/V4、InA、SQL)及服务形态(UI Service与Web API),并通过实际案例说明不同选项的应用场景。同时介绍了服务版本控制机制、发布流程及Fiori预览功能,帮助开发者理解如何通过Service Binding将业务能力高效转化为可消费

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 5712
上一篇: The 3rd Universal Cup. Stage 29: Metropolis(2024上海区域赛ICBGD)
下一篇: The 2023 ICPC Asia Shenyang Regional Contest(2023沈阳区域赛CEJK)
西望云天
博客等级 码龄3年 74粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值