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