开门游戏

John和Gogo位于N+1个房间的两端(0号和N号房间),相邻房间之间都有一扇门,门上涂有颜色,共16种颜色(分别由字母A至P表示),有个房间编号为trophy。游戏时,John先开某种颜色的一类门,然后Gogo再开另一种颜色的门,依次轮流。谁先打开自己一侧到Trophy房间的所有门,则获胜;如果同时打通,算和局。游戏时,John和Gogo会试图尽快打通己方通道的同时,尽量延缓对手的打通速度。假设比赛结束时所打开的门的颜色种数为x,如果平局返回0,如果John胜返回x,如果Gogo胜返回-x。

 

示例:doors="ABAPDCAA",trophy=5,则比赛时Gogo可以选择先开C色门,然后A色门,而John无论如何开,都不会比Gogo更快,所以Gogo获胜时两个人各打开2扇门,返回-4。

 

 

分析游戏过程,每个选手都要尽快打通自己一方的通道,而尽量延缓对方的速度,所以,如果某种颜色的门在两侧都存在,则无论谁打开此类门,则好比是帮了对方的忙,所以此类门应该尽可能留给对方去开,如果必须自己开,则留在后面开,所以可以得到一个贪心规则,即优先打开自己这边独有的颜色的门,然后才打开两边都有的颜色的门,规则对每个选手都适用。

 

用三个集合分表表示John特有的颜色集,Gogo特有的颜色集,以及both拥有的颜色集合。有了这三个集合,想象应该有好的数学方式直接求解,但是脑袋有点沉,没有太想明白,所以还是选择用循环模拟算了

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值