博弈论笔记总结

博弈论

  • 一、四大博弈模型
    • 1. 巴什博弈(Bash Game)
    • 2. 斐波那契博弈 (Fibonacci Game)
    • 3. 威佐夫博弈 (Wythoff Game)
    • 4. 尼姆博弈(Nim Game)
  • 二、SG函数
    • 0. 前言
    • 1. 前置知识
      • 公平组合游戏(ICG游戏)
      • 必胜态与必败态
      • DAG(有向无环图)中的博弈
    • 2. SG函数
      • Mex运算
      • 定义
      • 性质
      • SG定理
      • 解题方法
  • 参考资料


一、四大博弈模型

1. 巴什博弈(Bash Game)

Problem
一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。

Solution
结论:若n%(m+1)==0,则后手赢,否则先手赢。

Proof

  1. 若 n <= m 显然先手胜。
  2. 若 n == m+1,则无论先手取1~m中多少个,后手总能取完,即后手必胜。
  3. 若 (m+1)| n,则先手取x个(x=1~m),后手取 (m+1-x)个,总能到达情况2;若不整除,则先手可取余数,后手变为整除情况,即先手必胜。

Code

if (n % (m + 1))
    puts("first win");
else
    puts("second win");

Practice
Brave Game(模板题)
kiki’s game(PN状态转巴什博弈)
Public Sale(变形)
悼念512汶川大地震遇难同胞——选拔志愿者

2. 斐波那契博弈 (Fibonacci Game)

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

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

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

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

Solution
结论:先手必败,当且仅当石子数为斐波那契数。

Proof
先证明必要性,斐波那契数一定先手必败,可以用数学归纳法,大致思路就是一定能拆成两堆斐波那契数,不论先手怎样取,后手总能取到最后一颗
然后证明充分性,由“Zeckendorf定理”(齐肯多夫定理):任何正整数可以表示为若干个不连续的Fibonacci数之和,那么就回到了斐波那契数列里。
具体证明:斐波那契博弈(Fibonacci Nim)

Code

int f[N];
map<int,bool>mp;
int main()
{
   
	f[1]=f[2]=1;
	for(i=3;i<=N;++i)
	{
   
		f[i]=f[i-1]+f[i-2];
		mp[f[i]]=1;
	}
	while(scanf("%d", &x) && x != 0)
		puts(mp[x] == 1 ? "Second win" : "First win");

}

Practice

你可能感兴趣的:(博弈论,博弈论,acm竞赛)