From 8f454b820c2cd655fc7a691485513ee158304807 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Tue, 26 Dec 2023 08:33:19 +0800 Subject: [PATCH] 'commit' --- TangDou/AcWing_TiGao/T5/GameTheory/1321.md | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/TangDou/AcWing_TiGao/T5/GameTheory/1321.md b/TangDou/AcWing_TiGao/T5/GameTheory/1321.md index a8dca4e..759f309 100644 --- a/TangDou/AcWing_TiGao/T5/GameTheory/1321.md +++ b/TangDou/AcWing_TiGao/T5/GameTheory/1321.md @@ -92,22 +92,20 @@ NO 这个情况比较复杂,因为如果某个人把$1$减少$1$,那么这个堆同时也消失了,相当于操作数减少了$2$。 -下面我们采用了动态规划的思想,用记忆化搜索来模拟演示一下: -$f[a][b]$ 表示当数量为$1$的堆有$a$个,剩下的堆的操作数是$b$的时候,先手是必胜还是必败, -f[a][b]=1 表示必胜,否则必败。$b$中不会出现数量为$1$的堆,除非只剩下一个堆了。 +本题中可能存在一些堆的石子个数等于$1$: +* 假设有$a$堆石子,其中每堆石子个数为$1$ +* 剩余堆的石子个数都严格大于$1$ -情况1: 当a>=2的时候,合并两个数量为1的堆,这样就让b这边的操作数增加了2+(b>0),因为如果原来b大于0,相当于操作数增加了3,否则b原来是0,那么操作是只增加2. -情况2: 和a>0 并且b>0 的时候,我们可以合并一个数量为1的堆和b中一个数量不为1的堆,那么a减少1,b增加1 -情况3:b>=2,我们合并b里面的两个堆或者减少1,无论哪种,都是让b里面的操作数减少1。 -情况4: 当a>0的时候,我们可以减少一个数量为1的堆,这样a就减少1,b不变。 +根据这些数量大于$1$的堆的石子可以求出上述定义出的$b$,我们使用$f(a, b)$表示此时先手必胜还是必败,因为博弈论在本质上是可以递推的,我们可以想出起点,再想出递推关系,就可以递推得到更大数据情况下的递推值,也就是博弈论本质上是$dp$。 +
-另外有一种非常特殊的情况,就是$b$等于$1$了,刚才我们说了,$b$里面不会出现数量为$1$的堆,除非只剩下一个堆了。因为$b$里面只要堆的数量超过$1$,就一定可以用合并超过替代减少$1$操作,这样是等价的。 +$Q:$**情况**$3$**为什么是两个表达式?** +答: +①当右侧存在时,合并左边两堆石子,则右侧多出一堆石子,并且,石子个数增加$2$,也就是$b+=3$ -除非$b$里面只有一个堆了,那么我们就只能不断减少$1$了。 - -所以当$b$是$1$的时候,实际我们求的问题应该变成$f[a+1][0]$ +②当右侧一个都没有的时候,左边送来了一堆,两个石子,按$b$的定义,是堆数+石子个数$-1=2$,即$b+=2$ ### 六、实现代码