。。。..

阶梯博弈的讲课:

树的删边游戏:无向图删边游戏:

​ 竹子原理比较好证明。

​ 数学归纳法比较严谨,竹子原理的理解基础上在作证明。

证明博客:浅谈博弈论 | 远航休息栈 (yhzq-blog.cc)

【算法学习笔记】博弈论浅析之游戏类 - RioTian (cnblogs.com)

这两篇博客的证明应该够啦。对于无向图的证明用奇偶对称性构造即可。

二分图博弈:考虑二分图的最大匹配,若最大匹配一定包含起点,则先手胜,否则后手胜。

二分图博弈是一类博弈模型,它可以被抽象为:给出一张二分图起始点 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3zBfhhT0-1628652558525)(https://www.zhihu.com/equation?tex=H)] ,A和B轮流操作,每次只能选与上个被选择的点(第一回合则是点 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5KYDAlXe-1628652558527)(https://www.zhihu.com/equation?tex=H)] )相邻的点,且不能选择已选择过的点,无法选点的人输掉。一个经典的二分图博弈模型是在国际象棋棋盘上,双方轮流移动一个士兵,不能走已经走过的格子,问谁先无路可走。

这类模型其实很好处理。考虑二分图的最大匹配,如果最大匹配一定包含 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-InMHXJKQ-1628652558528)(https://www.zhihu.com/equation?tex=H)] ,那么先手必胜,否则先手必败。

如果最大匹配一定包含 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eP783XwI-1628652558531)(https://www.zhihu.com/equation?tex=H)],那么先手只需要一直按照匹配选点即可。后手不可能选到非匹配点,如果后手选到一个非匹配点,设路径为 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-epubjKDq-1628652558533)(https://www.zhihu.com/equation?tex=H%E2%86%92P_1%E2%86%92%5Ccdots%E2%86%92P_%7Bn-1%7D%E2%86%92P_n)] ,那么把现在的匹配 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3hnAVCrj-1628652558534)(https://www.zhihu.com/equation?tex=%5C%7BH-P_1%2C%5Cdots%2CP_%7Bn-2%7D-P_%7Bn-1%7D%5C%7D)] 换成[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8xWLqIIb-1628652558535)(https://www.zhihu.com/equation?tex=%5C%7BP_1-P_2%2C%5Cdots%2CP_%7Bn-1%7D-P_%7Bn%7D%5C%7D)],匹配数不变但不包含 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Synhqzk3-1628652558537)(https://www.zhihu.com/equation?tex=H)] ,与最大匹配一定包含 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8CIj46Ni-1628652558538)(https://www.zhihu.com/equation?tex=H)] 矛盾。

如果最大匹配不一定包含 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tc4DQs5m-1628652558539)(https://www.zhihu.com/equation?tex=H)] ,考虑某个不包含 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6ScFqZL8-1628652558539)(https://www.zhihu.com/equation?tex=H)] 的最大匹配 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1bn3Z6Ab-1628652558540)(https://www.zhihu.com/equation?tex=%5Cmathcal%7BM%7D)] 。先手无论选择哪个点,它都一定是匹配点,否则设这个点为 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3wHUBrZf-1628652558541)(https://www.zhihu.com/equation?tex=P)] ,则发现了新匹配 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-48RKaUsO-1628652558542)(https://www.zhihu.com/equation?tex=H-P)] ,与 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kxhYWIIB-1628652558542)(https://www.zhihu.com/equation?tex=%5Cmathcal%7BM%7D)] 是最大匹配矛盾。之后后手一直按照匹配选点即可,先手不可能选到非匹配点,否则设路径为[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wHPhVmfS-1628652558543)(https://www.zhihu.com/equation?tex=H%E2%86%92P_1%E2%86%92%5Ccdots%E2%86%92P_%7Bn-1%7D%E2%86%92P_n)] ,把现在的匹配 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gLIf6INZ-1628652558543)(https://www.zhihu.com/equation?tex=%5C%7BP_1-P_2%2C%5Cdots%2CP_%7Bn-2%7D-P_%7Bn-1%7D%5C%7D)] 换成 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zu58VSsh-1628652558544)(https://www.zhihu.com/equation?tex=%5C%7BH-P_1%2C%5Cdots%2CP_%7Bn-1%7D-P_%7Bn%7D%5C%7D)] ,明显匹配数变多了,与 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GOzmK5nH-1628652558544)(https://www.zhihu.com/equation?tex=%5Cmathcal%7BM%7D)] 是最大匹配矛盾。

如何确定最大匹配是否一定包含 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s8LsBt1s-1628652558545)(https://www.zhihu.com/equation?tex=H)] 呢?我们可以对删除和不删除 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nWBNuFM7-1628652558545)(https://www.zhihu.com/equation?tex=H)] 的情形分别做二分图最大匹配,如果删除两个匹配数一样多,说明 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GqD4Z1Lh-1628652558546)(https://www.zhihu.com/equation?tex=H)] 是可有可无的,存在不包含 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FZgFxEOf-1628652558546)(https://www.zhihu.com/equation?tex=H)] 的最大匹配。否则,说明 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-59NQ0E9w-1628652558547)(https://www.zhihu.com/equation?tex=H)] 是不可或缺的。

具体实现可以根据数据范围选用**匈牙利算法Dinic**。需要注意的是,如果采用Dinic,不要根据有没有 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mc0cpyt5-1628652558547)(https://www.zhihu.com/equation?tex=H)] 点建两次图。而是在建图时把涉及 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-obCG7izv-1628652558548)(https://www.zhihu.com/equation?tex=H)] 点的边存下来,跑完第一次Dinic后再建这些边,第二次Dinic看有没有增加流量。

牛逼巨人的博客:算法学习笔记(74): 二分图博弈 - 知乎 (zhihu.com)

image-20210808164820951

博客一篇总结的有点东西:博弈论总结(已更新二分图博弈) - ww3113306 - 博客园 (cnblogs.com)

**fibonacci的证明:**原博客:(1条消息) 斐波那契博弈(Fibonacci Nim)_nyist_xiaod-CSDN博客_斐波那契博弈

有一堆个数为n(n>=2)的石子,游戏双方轮流取石子,规则如下:

1)先手不能在第一次把所有的石子取完,至少取1颗;

2)之后每次可以取的石子数至少为1,至多为对手刚取的石子数的2倍。

约定取走最后一个石子的人为赢家,求必败态。

结论:当n为Fibonacci数的时候,必败。

f[i]:1,2,3,5,8,13,21,34,55,89……

用第二数学归纳法证明:

为了方便,我们将n记为f[i]。

1、当i=2时,先手只能取1颗,显然必败,结论成立。

2、假设当i<=k时,结论成立。

则当i=k+1时,f[i] = f[k]+f[k-1]。

则我们可以把这一堆石子看成两堆,简称k堆和k-1堆。

(一定可以看成两堆,因为假如先手第一次取的石子数大于或等于f[k-1],则后手可以直接取完f[k],因为f[k] < 2*f[k-1])

对于k-1堆,由假设可知,不论先手怎样取,后手总能取到最后一颗。下面我们分析一下后手最后取的石子数x的情况。

(下面讨论后手从k-1中取出数量最大时,先手能不能直接利用这个最大值的二倍将k堆全部取出)

如果先手第一次取的石子数y>=f[k-1]/3,则这小堆所剩的石子数小于2y,即后手可以直接取完,此时x=f[k-1]-y,则x<=2/3*f[k-1]。

我们来比较一下2/3f[k-1]与1/2f[k]的大小。即4f[k-1]与3f[k]的大小,对两值作差后不难得出,后者大。

所以我们得到,x<1/2*f[k]。

上面的证明可以将其分为两类:

为啦让后手能一次性取完。

  1. 假设f[k-1]%3== 0 ,先手对于y的取值将是f[k-1]/3,然后后手的取值就是2/3*f[k-1];

  2. 假设f[k-1]%3== 1 ,先手对于y的取值将是f[k-1]/3+1,后手的取值就是2/3*f[k-1];

  3. 假设f[k-1]%3== 2 ,先手对于y的取值将是f[k-1]/3+1,后手的取值就是2/3*f[k-1]+1;

    这样对于前两种情况就是上面直接推出来的没有1/2*f[k-1]也就是后手这次一口气取完f[k-1]这一堆,先手也无法直接将f[k]这一堆取完。

    *第三种情况就是比较(2/3 * f[k-1]+1)2与f[k],我们可以将其转化———— (2/3 * f[k-1]+1) * 2<=(f[k-1]) * 2<=f[k].这样我们的先手还是不能取完f[k]这一堆。将会导致后手赢的局面,同样因为多个加一都可以,没有上取得1,2,情况也将是这种局面。

    即后手取完k-1堆后,先手不能一下取完k堆,所以游戏规则没有改变,则由假设可知,对于k堆,后手仍能取到最后一颗,所以后手必胜。

    即i=k+1时,结论依然成立。

那么,当n不是Fibonacci数的时候,情况又是怎样的呢?

这里需要借助“Zeckendorf定理”(齐肯多夫定理):任何正整数可以表示为若干个不连续的Fibonacci数之和。

关于这个定理的证明,感兴趣的同学可以在网上搜索相关资料,这里不再详述。

分解的时候,要取尽量大的Fibonacci数。

比如分解85:85在55和89之间,于是可以写成85=55+30,然后继续分解30,30在21和34之间,所以可以写成30=21+9,

依此类推,最后分解成85=55+21+8+1。

则我们可以把n写成 n = f[a1]+f[a2]+……+f[ap]。(a1>a2>……>ap)

我们令先手先取完f[ap],即最小的这一堆。由于各个f之间不连续,则a(p-1) > ap + 1,则有f[a(p-1)] > 2*f[ap]。即后手只能取f[a(p-1)]这一堆,且不能一次取完。

此时后手相当于面临这个子游戏(只有f[a(p-1)]这一堆石子,且后手先取)的必败态,即先手一定可以取到这一堆的最后一颗石子。

同理可知,对于以后的每一堆,先手都可以取到这一堆的最后一颗石子,从而获得游戏的胜利。

k倍动态减法【博弈论】K倍动态减法游戏 - dyhaohaoxuexi - 博客园 (cnblogs.com)

10
Case 1: 100000 3//k为3的时候的动态a[ ]序列。

1 2 3 4 6 8 11 15 21 29 40 55 76 105 145 200 276 381 526 726 1002 1383 1909 2635 3637 5020 6929 9564 13201 18221 25150 34714 47915 66136 91286 126000
21
Case 2: 100000 2//k为2的时候的动态a[ ]序列。
1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393

例题:[A simple stone game - HDU 2486 - Virtual Judge (ppsucxtt.cn)

阶梯博弈讲题:

Game HDU - 3389

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ENI48Fig-1628652558548)(C:\Users\Mechrevo\AppData\Roaming\Typora\typora-user-images\image-20210810092501290.png)]

根据这张图我们可以得到对于从9开始的数字每六个都是一个循环,而且他们中间对应的每一个类数字都可以和另外一类数字加和满足条件,例如能和15匹配的一定可以和9匹配,15和就正好差六的倍数, B<A && (A+B)%2=1 && (A+B)%3=0.假如当前的A,B已经满足这个算式,的A减少6的倍数,B增加6的倍数,都将会使得等式仍然成立。图中1,3,4是没有出边的,所以他们三个是终点,2,5,6各对应他们中的一个点有边,所以2,5,6,需要一步到终点,然后对于2,5,6这一类数字来说,他们一定会走奇数步,而对于1,3,4这一类数字来说他们一定会走偶数不,所以2,5,6这一类数字就是这道阶梯博弈里面的奇数台阶。

Georgia and Bob POJ - 1704 Game - HDU 3389 - Virtual Judge (ppsucxtt.cn)

先考虑一共偶数个棋子,假设我将1-2,3-4,,,,(n-1)-n这样配对,对于他们中间的差值,我作为先手,1.如果异或和为0,我无论如何移动都会使得异或和大于零。2.然而如果当前异或和非零,我完全可以缩减某一部分的距离,将异或和为零的状态永远给后手,无论后手是将某一差值拉大还是拉小,我永远可以将异或和维护成零给后手。(比如移动前面的棋子,那我们移动后面的棋子。若移动后面的棋子,那么它的距离将会更小,根据nim的证明,这个减少操作将不会使异或和变大,我们仍能给对手异或和为零的必败态)

相反,如果我是第一种情况,就陷入啦后手永远可以将异或和为零的情况永远给我。

考虑奇数个棋子:我可以将第一个棋子拿出来与0号位置配对,对于这一对,无法将此差值拉大,但是他还满足于其他组对可以nim的条件(无非就是它的第一个点不能移动罢啦)。

注意这道题格子的起始坐标为1(实测亲证,不看必掉坑里)

最后将这个模型转化为阶梯博弈,竖着来看这张图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7EVR4jnH-1628652558549)(C:\Users\Mechrevo\AppData\Roaming\Typora\typora-user-images\image-20210810095850218.png)]

左侧为第一个样例,右侧为第二个样例:

对于每一个棋子从下网上,都作为一个阶梯来分割空格,剩余没有用到的空格对应原模型中的石子,最后我们会发现只有编号为奇数的棋子到偶数的棋子中间的空格数字是对应原模型中的奇数阶梯上的石子数,最后如果最上面有每一个棋子上面的空格最后都要被拿下来,这样就成功转化成阶梯博弈。从下往上编写编号,只需考虑编号为奇数的棋子上面的空格数即可。

sg博弈平方取值讲题HDU_1729 Stone Game(SG) - AC_Von - 博客园 (cnblogs.com)

思路:这题明显的sg函数。可惜我纠结了半天没想起思路来。1、设当前的箱子容量为si,求出一个t满足:t + t * t < si,如果当前箱子里有ci颗石头,

1、ci > t 则必胜;

2、ci == t 则必败;

3、ci < t不能确定,将t作为si递归调用函数。

当满足ci > t时,return si - ci 作为当前状态的sg值。因为:

如图:

img

当ci在si点时,为有向图的端点,出度为0,也就是必败点,所以sg值为0;

当ci 位于si - 1时,ci的端点可能的sg值构成的集合为{0},所以当前sg值 为1;

当ci 位于si - 2 时,ci的端点可能的sg值构成的集合为{0, 1},所以当前的sg值为2;

可得,ci所在位置的sg值为si - ci;

这道题需要模拟一下,

第一层:当先手开始的时候,

1.算出来的t满足c大于t,这样先手必胜,可以直接放满,变成nim博弈模型。

2.t要等于c那么先手无论如何放进一个去都会使得c增大一,使得给对手的为c+1,必胜态,自己为必败态。

3.t大于c:(下面的T代表我上一层的t的取值)

考虑到这一步c能增大到多少,增大之后与t进行比较(这些递归过程中都没有将增加操作给对手,只是先手在赛前模拟,怎么阴后手一波)

3.1 如果增大之后大于T,根据1,对手必胜。//所以先手会尽可能不仅如此这个状态。(最后看:又因为我每次都是因为上一层的T比我当前的c大,所以如果我可以利用c将这次的值去到比上一层的t还要大,我为何不取3.2让对手一直处于必败态所以这里的3.1,将会别先手的最右策略给忽略掉);

3.2如果增大之后等于T,根据2,对手陷入必败态。//这个是最优的。

3.3如果增大之后还小于T,这样又会走到3.中,因为t一直变小而且速度非常快,所以一定有一个时刻会进入3.1或者3.2;。。。。。。

考虑二人都选最优,当t开始递归的时候每一个人都尽可能的将c变成T给对手,让对手处于必败态,对手将c增加一点我们再将c变成上一层的T最后后手必输。

这样每次到最后都是一个nim博弈题,递归到最后因为我的t+t * t<T且t为最大可取自然数,所以c+c * c 将比我的T要大,所以最深层的先手取值就是一个nim博弈。且sg=min(c+c*c,T-c)=T-c;

树上删边游戏:A tree game - HDU 3094 - Virtual Judge (ppsucxtt.cn)

套用结论dfs搜:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值