首页 > 其他分享 >第四章 数学知识四

第四章 数学知识四

时间:2023-02-13 00:11:32浏览次数:60  
标签:局面 有向图 游戏 int 行动 数学知识 SG 第四章

容斥原理

\(C_{n}^{1} + C_{n}^{2} + \dots + C_{n}^{n} = 2 ^ {n}\),从n个数中选任意多个数的方案数

证明,\(\left | S_{1}\cup S_{2} \dots \cup S_{n} \right | = \sum_{i} \left | S_{i} \right | + \sum_{i,j}\left | S_{i} \cap S_{j} \right |+ \sum_{i,j,k} \left | S_{i}\cap S_{j} \cap S_{k} \right |\)

假设\(x\in S_{1} \cup S_{2} \dots \cup S_{n}\),存在于\(k\)个集合之中,\(1\le k\le n\),那么\(x\)被计算的次数为,\(C_{k}^{1} - C_{k}^{2}+C_{k}^{3}-C_{k}^{4}+ \dots + (-1)^{k-1}C_{k}^{k}=1\)

AcWing 890. 能被整除的数

#include<iostream>
#include<algorithm>
using namespace std;

typedef long long LL;
const int N = 20;

int p[N];

int main() {
    int n, m;
    cin >> n >> m;
    int res = 0;
    for (int i = 0; i < m; i++) cin >> p[i];
    // 枚举状态,二进制状态压缩
    for (int i = 1; i < 1 << m; i++) {
        int t = 1, cnt = 0;
        for (int j = 0; j < m; j++) {
            if (i >> j & 1) {
                cnt++;
                if ((LL)t * p[j] > n) t = -1, break;
                t *= p[j];
            }
        }
        if (t != -1) {
            if (cnt % 2) res += n / t;
            else res -= n / t;
        }
    }
    cout << res << endl;
    return 0;
}

简单博弈论

公平组合游戏ICG

若一个游戏满足:
由两名玩家交替行动;

  • 在游戏进程的任意时刻;
  • 可以执行的合法行动与轮到哪名玩家无关;
  • 不能行动的玩家判负;

则称该游戏为一个公平组合游戏。
NIM博弈属于公平组合游戏,但城建的棋类游戏,比如围棋,就不是公平组合游戏。因为围棋交战双方分别只能落黑子和白子,胜负判定也比较复杂,不满足条件2和条件3。

Nim游戏

给定N堆物品,第i堆物品有Ai个。两名玩家轮流行动,每次可以任选一堆,取走任意多个物品,可把一堆取光,但不能不取。取走最后一件物品者获胜。两人都采取最优策略,问先手是否必胜。

我们把这种游戏称为NIM博弈。把游戏过程中面临的状态称为局面。整局游戏第一个行动的称为先手,第二个行动的称为后手。若在某一局面下无论采取何种行动,都会输掉游戏,则称该局面必败。
所谓采取最优策略是指,若在某一局面下存在某种行动,使得行动后对面面临必败局面,则优先采取该行动。同时,这样的局面被称为必胜。我们讨论的博弈问题一般都只考虑理想情况,即两人均无失误,都采取最优策略行动时游戏的结果。
NIM博弈不存在平局,只有先手必胜和先手必败两种情况。
定理: NIM博弈先手必胜,当且仅当 A1 ^ A2 ^ … ^ An != 0

有向图游戏

给定一个有向无环图,图中有一个唯一的起点,在起点上放有一枚棋子。两名玩家交替地把这枚棋子沿有向边进行移动,每次可以移动一步,无法移动者判负。该游戏被称为有向图游戏。
任何一个公平组合游戏都可以转化为有向图游戏。具体方法是,把每个局面看成图中的一个节点,并且从每个局面向沿着合法行动能够到达的下一个局面连有向边。

Mex运算

设S表示一个非负整数集合。定义mex(S)为求出不属于集合S的最小非负整数的运算,即:
mex(S) = min{x}, x属于自然数,且x不属于S

SG函数

在有向图游戏中,对于每个节点x,设从x出发共有k条有向边,分别到达节点y1, y2, …, yk,定义SG(x)为x的后继节点y1, y2, …, yk 的SG函数值构成的集合再执行mex(S)运算的结果,即:
SG(x) = mex({SG(y1), SG(y2), …, SG(yk)})
特别地,整个有向图游戏G的SG函数值被定义为有向图游戏起点s的SG函数值,即SG(G) = SG(s)。

有向图游戏的和 —— 模板题 AcWing 893. 集合-Nim游戏

设G1, G2, …, Gm 是m个有向图游戏。定义有向图游戏G,它的行动规则是任选某个有向图游戏Gi,并在Gi上行动一步。G被称为有向图游戏G1, G2, …, Gm的和。
有向图游戏的和的SG函数值等于它包含的各个子游戏SG函数值的异或和,即:
SG(G) = SG(G1) ^ SG(G2) ^ … ^ SG(Gm)

定理
有向图游戏的某个局面必胜,当且仅当该局面对应节点的SG函数值大于0。
有向图游戏的某个局面必败,当且仅当该局面对应节点的SG函数值等于0。

标签:局面,有向图,游戏,int,行动,数学知识,SG,第四章
From: https://www.cnblogs.com/chenjq12/p/17115071.html

相关文章

  • 第四章 数学知识一
    质数对所有的大于1的自然数字,定义了【质数/合数】这一概念。对于所有小于等于1的自然数,没有这个概念,它们既不是质数也不是合数。质数的定义:对于大于1的自然数,如果这个数......
  • 第四章 数学知识二
    欧拉函数什么是欧拉函数欧拉函数\(\phi(n)\):1-n中与n互质的数的个数例如:\(\phi(6)=2\),1-6中与6互质的数为1、5a,b互质就是gcd(a,b)=1如何求解欧拉函数......
  • Docker第四章:Dockerfile、微服务、网络连接、compose容器编排、容器监控
    Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本、 执行流程1:docker从基础镜像运行一个容器2:执行一条指令并对容器作出修改......
  • 《Terraform 101 从入门到实践》 第四章 States状态管理
    《Terraform101从入门到实践》这本小册在南瓜慢说官方网站和GitHub两个地方同步更新,书中的示例代码也是放在GitHub上,方便大家参考查看。军书十二卷,卷卷有爷名。为......
  • Python爬虫-第四章-5-高效抓取视频网站视频资源至本地
    本章内容:  91看剧抓取影视资源  流程:    1.获取影片播放页面源码    2.获取m3u8链接地址    3.下载m3u8文件    4.读取m3u8......
  • 第一阶段第四章运算符
    第四章 算数运算符  运算代码:publicclassArithmeticOperators{ publicstaticvoidmain(String[]args){ inti=10/4;//数学中得2.5java中得2 doubled......
  • Acwing - 算法基础课 - 笔记(数学知识 · 四)(补)
    数学知识(四)这一小节讲的是容斥原理和简单博弈论。容斥原理定义最基本的,假设有3个两两相交的圆。那么三个圆所覆盖的面积大小为如果是2个圆的话,那么其所覆盖的面积为如果是4......
  • Linux系统Shell脚本第四章:shell函数
    一、shell函数1.函数的作用定义较为复杂的但是需要重复使用的内容,以便再次使用可以直接调用函数节约时间,提高效率2.函数使用步骤①首先是定义函数②其次是调用函数(......
  • 算法竞赛基础数学知识
    1、异或相同的数,异或结果为0,不同的数,异或结果为1.异或会用在nim博弈和一些数学中。可以找出n+1个数中,唯一一个与其他的数不同的数异或有个性质:一个数对另一个数异或两次,......
  • C++第四章类与对象
    一、面向对象的基本特点1.  抽象对同一类对象的共同属性和行为进行概括,形成类。先注意问题的本质及描述,其次是实现过程或细节。数据抽象:描述某类对象的属性或状态(对象相互......