|
|
|
@ -70,21 +70,18 @@ $$\large \underbrace{x,a_i,a_{i+1},\cdots,a_j}_{A(x)}$$ 都为 **必胜局面**
|
|
|
|
|
有了上面推的$left[i][j]$唯一性,得出一个有用的推论:
|
|
|
|
|
**对于任意非负整数 $x \neq left(i,j)$,$\large (x,a_i,a_{i+1},\cdots,a_j)$为必胜局面**
|
|
|
|
|
|
|
|
|
|
#### 5、定义$L$和$R$
|
|
|
|
|
因为下面的讨论中出现的$L$和$R$的含义不是很好理解,我们先把这个概念理清楚:
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
#### 5、疑问
|
|
|
|
|
|
|
|
|
|
<font color='red' size=4><b>博弈论的题目都是可以通过动态规划来递推的</b></font>。
|
|
|
|
|
|
|
|
|
|
**$Q$**:为什么要这么定义$L$和$R$呢?
|
|
|
|
|
答:<font color='red' size=4><b>博弈论的题目都是可以通过动态规划来递推的</b></font>。
|
|
|
|
|
为什么呢?你想啊,最终的胜利,肯定不是从天下直接掉下来的,是一步步取得的,也就是前序状态会直接影响后面的状态,所以
|
|
|
|
|
> **博弈论 $\Leftrightarrow $ 动态规划 $\Leftrightarrow $ 递归**
|
|
|
|
|
**$Q$:为什么定义先手必败,而不是定义先手必胜呢?**
|
|
|
|
|
答:因为上面证明过定义 **先手必败** 的动态规划结果数组,是肯定存在并且是唯一的.存在且唯一的,可以递推出来,如果定义的是 **先手必胜**,根据博弈论的知识,我们知道,必胜的策略不唯一,不方便递推。而如果我们采用的是 **先手必败** 这样的定义,那么由于它的存在性和唯一性,所以,只要不是它就是必胜局面!
|
|
|
|
|
|
|
|
|
|
**$Q$:怎么递推?**
|
|
|
|
|
递推嘛,就是类似于 **数学归纳法**,先求出初始状态是多少,然后假设$i \sim j-1$这段已经计算出$left[i][j-1],right[i][j-1]$了,现在想依赖于这两个数值推导出$left[i][j],right[i][j]$,怕写的太长麻烦,就定义了$L=left[i][j-1],R=right[i][j-1]$
|
|
|
|
|
|
|
|
|
|
**$Q$:那为什么是定义先手必败,而不是先手必胜呢?**
|
|
|
|
|
答:因为上面证明过定义先手必败的动态规划数组,是肯定存在并且是唯一的,这样才能正常计算啊。
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
考虑三个问题:
|
|
|
|
|
- ① 初始值
|
|
|
|
@ -93,50 +90,69 @@ $$\large \underbrace{x,a_i,a_{i+1},\cdots,a_j}_{A(x)}$$ 都为 **必胜局面**
|
|
|
|
|
> **注:答案在哪,并不是和递推式相关,而是和状态表示相关,一定要注意**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**① 初始值**
|
|
|
|
|
$\large L[i][i]=R[i][i]=a_i$
|
|
|
|
|
$\large left[i][i]=right[i][i]=a_i$
|
|
|
|
|
|
|
|
|
|
当只有一堆石子时($only$ $i$),我在这堆前面添加一堆,个数和这堆一样多,对于**两堆相同的石子**,**后手进行和先手对称的操作**,你咋干我就咋干,我拿完,你瞪眼~, **先手必败**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**② 答案在哪**
|
|
|
|
|
**先手必败** $\Leftrightarrow \ L[2][n]=a_1$
|
|
|
|
|
> **解释**:如果$L[2][n]$与$a[1]$相等,就意味着本来挺好的$a[2] \sim a[n]$,结果,前面放上了一个$a[1]$,而加上的$a[1]$使得现在的局面必败,先手必败。
|
|
|
|
|
**先手必败** $\Leftrightarrow \ left[2][n]==a[1]$ , **先手必胜** $\Leftrightarrow \ left[2][n]!=a[1]$
|
|
|
|
|
> **解释**:$a[2] \sim a[n]$,前面放上了一个$a[1]$,
|
|
|
|
|
> 根据定义$left[2][n]$代表在$a[2]\sim a[n]$之前放上一个数,可以使得放后的局面必败。
|
|
|
|
|
> 现在放上去的是$a[1]$,可以它偏偏等于$left[2][n]$这个令人讨厌的数字,面对这样的局面,天生是死局,先手必败。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**③ 递推式**
|
|
|
|
|
* 变化方法:从左侧拿走一些石子或者从右侧拿走一些石子
|
|
|
|
|
* 让我们使用$left[i][j-1]$和$right[i][j-1]$来表示$left[i][j]$和$right[i][j]$,形成$DP$递推关系
|
|
|
|
|
* 变化方法:从左侧拿走一些石子或者从右侧拿走一些石子,我们需要考虑在一个局面确定后,在此局面上左侧、右侧添加一个什么数字(石子个数),才能使得变化后的局面必败。
|
|
|
|
|
|
|
|
|
|
* $left[i][j-1]$和$right[i][j-1]$表示$left[i][j]$和$right[i][j]$,形成$DP$递推关系
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 分类讨论
|
|
|
|
|
递推式需要分类讨论
|
|
|
|
|
|
|
|
|
|
- **特殊情况:$L=R=0$**
|
|
|
|
|
若 $R=0$ 则 $L=R=0$,此时 $x>\max\{L,R\}$,也就是说 $L=0$ 和 $R=0$ 都属于 $Case$ $5$,故其它 $Case$ 满足 $L,R>0$。
|
|
|
|
|
先把 **特殊情况** 说清楚:
|
|
|
|
|
|
|
|
|
|
令 $\displaystyle \large X=a[j](x>0)$
|
|
|
|
|
**$\large L=R=0$**
|
|
|
|
|
|
|
|
|
|
若 $R=0$ 则 $L=0$
|
|
|
|
|
> <font color='red'><b>注:因$R=0$,表示在[$i$,$j-1$]确定后,右侧为$0$就能满足[$i$,$j-1$]这一段为先手必败,此时,左侧增加那堆个数为$0$就可以继续保持原来的先手必败,即$L=0$,而且已经证明了$L=R=0$是唯一的。</b></font>
|
|
|
|
|
|
|
|
|
|
此时 $X>\max\{L,R\}$,也就是说 $L=0$ 和 $R=0$ 都属于 $Case$ $5$,故其它 $Case$ 满足 $L,R>0$。
|
|
|
|
|
|
|
|
|
|
令 $\displaystyle \large X=a[j](X>0)$
|
|
|
|
|
|
|
|
|
|
下面,我们按$X$与$R$的大小关系,划分为三种情况,分别进行讨论:
|
|
|
|
|
$$
|
|
|
|
|
\large \left\{\begin{matrix}
|
|
|
|
|
X=R & \\
|
|
|
|
|
X<R & \left\{\begin{matrix} X<L \\X \geq L \end{matrix}\right. \\
|
|
|
|
|
X>R & \left\{\begin{matrix} X \leq L \\X>L \end{matrix}\right.
|
|
|
|
|
\end{matrix}\right.
|
|
|
|
|
$$
|
|
|
|
|
|
|
|
|
|
* $X=R$($Case$ $1$)
|
|
|
|
|
最简单的情况——根据 $R=right[i][j-1]$ 的定义,$X=R$则区间 $[i,j]$ 是必败局面,因此左边啥也不能添,添了反而错,故
|
|
|
|
|
根据 $R=right[i][j-1]$ 的定义,$X=R$则区间 $[i,j]$ 是必败局面,因此左边啥也不能添,添了反而错
|
|
|
|
|
$$\large left[i][j]=0$$
|
|
|
|
|
|
|
|
|
|
* $X<R$
|
|
|
|
|
* ① $X<L$,即 $X< \min\{L,R\}$($Case$ $2$)
|
|
|
|
|
* **结论**:
|
|
|
|
|
$$\large left[i][j]=X$$
|
|
|
|
|
* **必胜策略**:
|
|
|
|
|
当右侧石子个数为$X$时,$\large left[i][j]=X$.即在右侧石子个数确定为$X$后,如果在左侧添加一堆石子,个数为$X$,就可以保证当前局面先手必败。
|
|
|
|
|
* **证明**:
|
|
|
|
|
即 **求证** $\large (X,a_i,a_{i+1},\cdots,a_{j-1},X)$为必败局面,其中$X< \min\{L,R\}$
|
|
|
|
|
|
|
|
|
|
由于最左边和最右边的两堆石子数量相同,后手可进行和先手 **对称** 操作,后手必将获得一个形如$(y,a_i,a_{i+1},⋯,a_{j−1})$ 或 $(a_i,a_{i+1},\cdots,a_{j-1},y)$ 的局面,其中: $0<y < X<\min\{L,R\}$
|
|
|
|
|
由于最左边和最右边的两堆石子数量相同,后手可进行和先手 **对称** 操作,当先手把某一侧的石子拿完后,后手必将获得一个形如$(y,a_i,a_{i+1},⋯,a_{j−1})$ 或 $(a_i,a_{i+1},\cdots,a_{j-1},y)$ 的局面,其中: $0<y < X<\min\{L,R\}$
|
|
|
|
|
|
|
|
|
|
**只有左侧为$L=left(i,j-1)$这个唯一值时,才是必败态,现在不是$L$,而是$y<min(L,R)$,所以后手必胜,即先手必败**, **证毕**。
|
|
|
|
|
**只有左侧为$L=left(i,j-1)$这个唯一值时,才是必败态,现在不是$L$,而是$y<min(L,R)$,所以后手必胜,即先手必败**。
|
|
|
|
|
|
|
|
|
|
<br>
|
|
|
|
|
|
|
|
|
|
* ② $X \geq L$,即 $L \leq X < R$($Case$ $3$)
|
|
|
|
|
* **结论**:$$\large left[i][j]=X+1$$
|
|
|
|
|
* **必胜策略**:
|
|
|
|
|
当右侧石子个数为$X$时,$\large left[i][j]=X+1$.即在右侧石子个数确定为$X$后,如果在左侧添加一堆石子,个数为$X+1$,就可以保证当前局面先手必败。
|
|
|
|
|
* **证明**:
|
|
|
|
|
即 **求证** $(X+1,a_i,a_{i+1},\cdots,a_{j-1},X)$为 **必败局面** ,其中 $L \leq X <R$
|
|
|
|
|
|
|
|
|
@ -153,10 +169,10 @@ $\large L[i][i]=R[i][i]=a_i$
|
|
|
|
|
|
|
|
|
|
* $X>R$
|
|
|
|
|
* ① $X≤L$,即 $R < X \leq L$($Case$ $4$)
|
|
|
|
|
* 结论:$$\large left[i][j]=X-1$$
|
|
|
|
|
* **必胜策略**:$$\large left[i][j]=X-1$$
|
|
|
|
|
* **证明**:
|
|
|
|
|
* 若先手拿最左边一堆,设拿了以后还剩 $z$ 个石子。
|
|
|
|
|
* 若 $z \geq R$,则后手将最右堆拿成 $z+1$ 个石子,<b>保证左侧比右侧多$1$个石子</b>,就能回到 $Case$ $4$ 本身,递归证明即可。
|
|
|
|
|
* 若 $z \geq R$,则后手将最右堆拿成 $z+1$ 个石子,<b>保证左侧比右侧少$1$个石子</b>,就能回到 $Case$ $4$ 本身,递归证明即可。
|
|
|
|
|
* 若 $0<z<R$,则后手将最右堆拿成 $z$ 个石子,由 $Case$ $2$ 知此时是必败局面。
|
|
|
|
|
* 若 $z=0$,则后手将最右堆拿成 $R$ 个石子(注意 $Case$ $4$ 保证了此时最右堆石子个数 $>R$),由 $right[i][j-1])$ 的定义知此时是必败局面。
|
|
|
|
|
|
|
|
|
@ -170,7 +186,7 @@ $\large L[i][i]=R[i][i]=a_i$
|
|
|
|
|
<br>
|
|
|
|
|
|
|
|
|
|
* ② $X>L$,即 $X>\max\{L,R\}$($Case$ $5$)
|
|
|
|
|
* **结论**:$$\large left[i][j]=x$$
|
|
|
|
|
* **必胜策略**:$$\large left[i][j]=x$$
|
|
|
|
|
* **证明**:
|
|
|
|
|
设先手将其中一堆拿成了 $z$ 个石子。
|
|
|
|
|
* 若 $z>\max\{L,R\}$,后手将另一堆也拿成$z$个,回到 $Case$ $5$,递归证明。
|
|
|
|
|