博弈论------白书

Posted pandaking

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了博弈论------白书相关的知识,希望对你有一定的参考价值。

poj2484

两枚硬币排成一个圈,alice和bob轮流从中取一枚或者两枚硬币。不过,取两枚时,所取的硬币必须是连续的。硬币取走后留下空位,相隔空位的硬币被视为是不连续的。alice开始先取,取走最后一枚硬币的一方获胜。当双方都采取最优策略,谁会获胜。

输入(硬币的个数)(0<=n<=1000000)

输出 赢的人的姓名

首先n的范围过大,不适合采用sg函数打表的方式,如果打表的话,会超时或者超空间,而且最重要的一点是圆排列的变化会有很多

然后圆上有一个对称的特点,可以围绕这个对称的特点展开文章,当对手取走一部分时,你可以取走对称部分的相对应的圆排列,这样可以保证后手必赢,而且有一点可以保证的就是到为奇数的时候,当第一次对手取2个,你可以通过取1个变成对称的情况,而对手取1个,你可以取两个

 1 #include<cstring>
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<cstdio>
 5 using namespace std;
 6 int n;
 7 int main(){
 8     while(scanf("%d",&n)!=EOF){
 9         if(n==0) break;
10         if(n==1||n==2) printf("Alice
");
11         else printf("Bob
");
12     }
13     return 0;
14 }

 

以上是关于博弈论------白书的主要内容,如果未能解决你的问题,请参考以下文章

网络流(最大流)Ford_Fulkerson算法 白书

白书-多重部分和问题

一个黑帽子的自白书

白书-部分和问题

白书 区间调度问题

欧拉函数白书模板