博弈论
博弈论定义
以下是博弈论的定义:
- 有两名玩家。
- 两名玩家轮流进行操作,每次操作总是在有限的合法操作集合中选择一种进行操作。
- 对于游戏中任何可能出现的状态,合法操作集合只取决于状态本身,不论玩家、之前的操作或其他。
- 如果轮到某个玩家操作,如果合法操作集合为空,则该选手为负。
如果双方都进行最优的操作,那么对于每一个状态,要么是必胜状态,要么是必输状态。
- 如果合法操作集合为空,则为必输状态
- 如果一个状态进行一次操作后均是必胜状态,那么这个状态就是必输状态。
- 如果一个状态进行一次操作后可能是必输状态,那么这个状态就是必胜状态。
Nim 游戏
规则
有 n n n 堆石子,第 i i i 堆石子有 a i a_i ai 个石子,两名玩家轮流取石子,可以在其中一堆石子中选取任意一堆,但不可以不取。如果轮到某个玩家时所有的石子堆都已经被拿空了,则判负。
一堆石子
假设只有 1 1 1 堆石子,先手可以将石子全取走,直接获胜。
两堆石子
假设有 2 2 2 堆石子,我们用 ( x , y ) (x,y) (x,y) 表示两堆石子的个数。(两堆石子的个数的顺序不影响胜负)
- 如果 x = y = 0 x=y=0 x=y=0,先手必输。
- 如果 x ≠ y = 0 x\not=y=0 x=y=0,那么先手把石子全拿走,先手必胜。
- 如果 x = y x=y x=y,那么先手不论从那一堆选多少石子,如果全部取走,那么后手将另一堆石子全部拿走即可;如果不全部拿走,后手都可以从另一堆石子选相同个数的石子,又回回到这一状态,由于每次只能取整数个石子,所以石子堆的个数总是不断减少,总会有 x = y = 0 x=y=0 x=y=0,故先手必输。
- 如果 x ≠ y x\not=y x=y,那么先手在较多的那一堆中取走 ∣ x − y ∣ \left|x-y\right| ∣x−y∣ 个石子就会转移到状态3,故先手必胜。
所以 x = y x=y x=y 时必输, x ≠ y x\not=y x=y 时必输。
多堆石子
假设有 n n n 堆石子,第 i i i 堆石子有 a i a_i ai 个石子,我们只需找一种运算来判断胜负状态即可。
显而易见,游戏总是在胜负状态上转换,必输状态有多个,必胜状态也有多个。如果状态是必输状态,当先手取走石子后,后手总可以取走一定石子让状态转换为必输状态。
并且必输状态不会转移到必输状态,很多运算使不满足以上这一性质的,进行一次取石子,显然是进行一次运算的逆运算在进行一次运算,需要满足不会再次转移到必输状态。然而这是不可能的,而突破口是规则中说不可以不取,也就是说,只有不取时必输状态才可以转换成必输状态,即逆运算和运算结果抵消,这与异或的定义相同。
所以,这种运算是异或,设 S = ⨁ i = 1 n a i S=\bigoplus_{i=1}^{n}a_i S=⨁i=1nai,由于 a i = 0 a_i=0 ai=0 时为必输状态,所以
S = 0 S=0 S=0,则为必输状态,否则为必胜状态。
- 在必胜状态,取石子时总有一种取石子的方案,使 S = 0 S=0 S=0,设在第 i i i 堆取 x x x 个石子,则 S ⊕ a i ⊕ ( a i − x ) = 0 S\oplus a_i \oplus (a_i-x)=0 S⊕ai⊕(ai−x)=0, a i − x = S ⊕ a i a_i-x=S\oplus a_i ai−x=S⊕ai, x = a i − S ⊕ a i x=a_i-S\oplus a_i x=ai−S⊕ai,因为 S ≠ 0 S\not=0 S=0,总有 i i i 使 a i > S ⊕ a i a_i>S\oplus a_i ai>S⊕ai。
- 在必输状态,取石子时没有一种取石子的方案,使 S = 0 S=0 S=0,设在第 i i i 堆取 x x x 个石子,则 S ⊕ a i ⊕ ( a i − x ) = 0 S\oplus a_i \oplus (a_i-x)=0 S⊕ai⊕(ai−x)=0, a i − x = S ⊕ a i a_i-x=S\oplus a_i ai−x=S⊕ai, x = a i − S ⊕ a i x=a_i-S\oplus a_i x=ai−S⊕ai,因为 S = 0 S=0 S=0,所以 x = a i − a i = 0 x=a_i-a_i=0 x=ai−ai=0,不得不取石子。
台阶
题目描述
现在,有一个 n n n 级台阶的楼梯,每级台阶上都有若干个石子,其中第 i级台阶上有 a i a_i ai 个石子。两位玩家轮流操作,每次操作可以从任意一级台阶上拿若干个石子放到下一级台阶中(不能不拿)。已经拿到地面上的石子不能再拿,最后无法进行操作的人视为失败。问如果两人都采用最优策略,先手是否必胜。
分析
我们把奇数台阶和偶数台阶分开看做两个 N i m Nim Nim 游戏,因为奇数台阶会把石子放到偶数台阶,而偶数台阶会把石子放到奇数台阶。
但这两个 N i m Nim Nim 游戏依旧会互相影响,我们假设从偶数台阶的石子放到奇数台阶的过程看做在奇数台阶增加石子,那么石子的变化个数从正整数集变成非零整数集。
但是策略依旧可以用,设 S = ⨁ i = 1 n a i S=\bigoplus_{i=1}^{n}a_i S=⨁i=1nai,如果 S = 0 S=0 S=0 那么必输,否则必胜。
因此,只需要在奇数台阶进行 N i m Nim Nim 游戏即可。