ferguson博弈_组合博弈游戏

² 组合博弈游戏的概念和特点

² 组合博弈游戏应满足以下性质:

² 1. 有两个游戏者。

² 2. 有一个可能的游戏状态集。这个状态集通常是有限的。

² 3. 游戏规则指定了在任何状态下双方的可能的走步和对应的后继状态集。如果在任意状态下双方的走步集合是相同的,那么说游戏是公平的(impartial) ,否则是不公平的(partizan) 。象棋是不公平的,因为每个人只能移动自己的子。

² 4. 两个游戏者轮流走步。

² 5. 当到达一个没有后继状态的状态后,游戏结束。在普通游戏规则(normal playrule) 下,最后一个走步的游戏者胜;在misµere游戏规则下,最后一个走步的游戏者输。如果游戏无限进行下去,我们认为双方打平,但通常我们会附加规定:

² 6. 不管双方怎么走步,游戏总能在有限步后结束。

² 其他规则包括:不允许随机走步(不能扔色子或者随机洗牌),且必须信息完全的(如隐藏走步是不允许的),有限步结束时不能产生平局。在本节中,我们只考虑公平游戏,并且通常只考虑普通游戏规则(最后走步的胜)。

² 和一般的双人零和博弈不同的是,这里的博弈游戏是特殊的:它们很好的数学特性,使得我们能够找到可判定输赢的数学策略,而不需要进行状态空间的搜索。

² P状态和N状态:假设双方都采取最明智的策略,则对于一些状态,刚完成走步的游戏者(Previous Player) 一定胜利,而对于其他状态,下一个走步的游戏者(NextPlayer) 一定胜利。把两种状态称为P状态(P position) 和N状态(N position) ,且有以下关系:

² 1. 所有终止状态是P状态

² 2. 能一步到达P状态的状态为N状态

² 3. 每一步都将到达N状态的状态为P状态

² 我们也可以把P状态称为必败态,N状态称为必胜态,含义是直观的。以上关系实际上给出了一个递推计算所有状态的P-N标号的算法。只要状态集构成一个n个结点m条边的有向无环图(directed acyclic graph, DAG) ,则可以按照拓扑顺序在O(m)时间内计算所有状态的标号。可问题在于这样的状态往往有很多,能否通过数学方法直接判断一个状态是P状态还是N状态呢?

² 常见的组合博弈模型,有若干种,但也有很多情况,不能套用这些模型,要具体情况具体分析。

² 博弈树模型

² 假设甲乙双方在进行这种二人游戏,从唯一的一个初始局面开始,如果轮到甲方走棋,甲方有很多种着法,但只能选择一个着法进行走棋。甲方走棋后,局面发生了变化,轮到乙方走棋,乙方也有很多种着法,但也只能选择一个着法。从初始局面开始,甲乙两方交替走棋,局面的变化可以表示成一个树形结构,这就是博弈树(game-tree)。一种井字棋的博弈树,如图所示。

² 每个局面可以用博弈树的一个结点来表示,某方获胜、失败或双方平局的结点构成了叶子结点。甲乙双方在选择着法时,不仅要考虑己方每一种着法的好坏,同时也要考虑对方会针对自己的每一种着法采取怎样的着法来应对。显然,博弈树是一种特殊的与或树,“或”结点和“与”结点是逐层交替出现的。己方扩展的结点之间是“或”关系,对方扩展的结点之间是“与”关系。

² Bash’s Game(巴什博弈)

² 所谓巴什博弈,是ACM题中最简单的组合游戏,大致上是这样的:

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

² 显然,如果n = m + 1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:

² 如果 n = (m + 1) * r + s ,(r为任意自然数,s≤m),即n%(m+1) != 0,则先取者肯定获胜。

² 巴什博弈还是很好理解的,以你是先手的角度考虑。你想把对手给弄垮,那么每一局,你都必须构建一个局势,这个局势就是每次都留给对手m+1的倍数个物品。因为,如果n=(m+1)r + s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(≤m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1)个,以后保持这样的取法,那么先取者肯定获胜。总之,要保持给对手留下(m+1)的倍数,就能最后获胜。

² 这个游戏还可以有一种变相的玩法:两个人轮流报数,每次至少报1个,最多报10个,谁能报到100者胜。

² 好运!该死的英语四级!

² Problem Description

大学英语四级考试就要来临了, Kiki和Cici 在紧张的复习之余喜欢打牌放松。“升级”?“斗地主”?那多俗啊!作为计算机学院的学生,Kiki和Cici打牌的时候可没忘记专业,她们打牌的规则是这样的:

1、 总共n张牌;

2、 双方轮流抓牌;

3、 每人每次抓牌的个数只能是2的幂次(即:1,2,4,8,16…)

4、 抓完牌,胜负结果也出来了:最后抓完牌的人为胜者;

假设Kiki和Cici都是足够聪明并且每次都是Kiki先抓牌,请问谁能赢呢?

² Input

输入数据包含多个测试用例,每个测试用例占一行,包含一个整数n(1<=n<=1000)。

Output

若Kiki能赢的话输出“Kiki”,否则输出“Cici”,每个实例的输出占一行。

Sample Input

1

3

Sample Output

Kiki

Cici

² 如果你是先手,考虑你的必胜态。注意,因为任何正整数都能写成若干个2的整数次方幂之和。由于规定只能取2的某个整数次方幂,只要你留给对手的牌数为3的倍数时,那么你就必赢,因为留下3的倍数时,对手有两种情况:

² 1:如果轮到对方抓牌时只剩3张牌,对方要么取1张,要么取2张,剩下的你全取走,win!

² 2:如果轮到对方抓牌时还剩3*k张牌,对手不管取多少,剩下的牌数是3*x+1或者3*x+2。轮到你时,你又可以构造一个3的倍数。 所以无论哪种情况,当你留给对手为3*k的时候,你是必胜的。

² 题目说Kiki先抓牌,那么当牌数为3的倍数时,Kiki就输了。否则Kiki就能利用先手优势将留给对方的牌数变成3的倍数,就必胜。

² #include

using namespace std;

int main ()

{

int N;

while ( cin >> N )

{

puts ( N % 3 != 0 ? “Kiki” : “Cici” );

}

return 0;

}

² 土地拍卖

² Problem Description

² 小鸡同学和鹏程同学始终没有逃过退学的命运,因为他们没有在程序设计竞赛中获奖,还为了争抢莎莎大打出手。现在等待他们的只能回家种田。要种田得有田才行,小鸡听说街上正在举行一场拍卖会,拍卖的物品正好就是一块田地。于是,小鸡带上他的全部积蓄,冲往拍卖会。后来发现,整个拍卖会只有小鸡和他的死对头鹏程。通过打听,小鸡知道这场拍卖的规则是这样的:刚开始底价为0,两个人轮流开始加价,不过每次加价的幅度要在1~N之间,当价格大于或等于田地的成本价M时,就把这块田地卖给这次叫价的人。小鸡和鹏程虽然比赛不行,但是对拍卖却十分精通,而且他们两个人都十分想得到这块田地。所以他们每次都是选对自己最有利的方式进行加价。由于抽签决定,所以每次都是由小鸡先开始加价,请问,第一次加价的时候,小鸡要出多少才能保证自己买得到这块地呢?

² Input

² 本题目包含多组测试,请处理到文件结束(EOF)。每组测试占一行。每组测试包含两个整数M和N(含义见题目描述,0

²

² Output

² 对于每组数据,在一行里按递增的顺序输出小鸡第一次可以加的价。两个数据之间用空格隔开。如果小鸡在第一次无论如何出价都无法买到这块土地,就输出”none”。

²

² Sample Input

² 4 2

² 3 2

² 3 5

²

² Sample Output

² 1

² None

² 3 4 5

² int main()

{

int n,m;

while(scanf(“%d%d”,&m,&n)!=EOF)

{

if(m%(n+1)==0)

{

printf(“none\n”);

continue;

}

²         if(m<=n)

{

printf(“%d”,m);

for(int i=m+1; i<=n; i++) printf(” %d”,i);

printf(“\n”);

continue;

}

printf(“%d\n”,m%(n+1));

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值