首页 > 代码库 > 【Codeforces 98E】 Help Shrek and Donkey 游戏策略神题
【Codeforces 98E】 Help Shrek and Donkey 游戏策略神题
from http://www.cnblogs.com/MashiroSky/p/6576398.html
A君有n张牌,B君有m张牌,桌上还有一张反扣着的牌,每张牌都不一样。
每个回合可以做两件事中的一件
- 猜测桌上的牌是什么,猜对则胜,猜败则输。
- 询问对方是否有某张牌,若有则需要将其示出,否则继续游戏。
A和B都很聪明,问A的胜率。
Solution
首先不到最后一刻是不会选择猜桌上的牌的。
假如某一次对方问了一张自己手上没有的牌,就可能会怀疑桌上的牌就是这张。
而询问对方是否有某张牌,我们可以选择询问自己手上有的牌,假如对方相信而去猜测这张牌的话就会输掉,我们称这样的行为作欺骗。
记f(n,m)f(n,m)表示先手有nn张牌,后手有mm张牌,先手的获胜概率。
那么就可以列一个表格,表示先手的选择以及后手的应对。
-
先手选择猜测对方的牌
-
- 后手认为先手在猜测,先手获胜的概率是mm+1(1?f(m?1,n))mm+1(1?f(m?1,n))
- 后手认为先手在欺骗,先手获胜的概率是1m+1+mm+1(1?f(m?1,n))1m+1+mm+1(1?f(m?1,n))
-
先手选择欺骗
-
- 后手认为先手在猜测,先手获胜的概率是11
- 后手认为先手在欺骗,先手获胜的概率是1?f(m,n?1)1?f(m,n?1)
那么对于先手的任意一个策略,后手会选择最优的策略去使他赢的概率尽可能小。也就是说假如先手用pp的概率选择去猜测,1?p1?p的概率选择去欺骗。那么最终的贡献就是
maxp{min{pmm+1(1?f(m?1,n))+(1?p),pm+1+pmm+1(1?f(m?1,n))+(1?p)(1?f(m,n?1))}}maxp{min{pmm+1(1?f(m?1,n))+(1?p),pm+1+pmm+1(1?f(m?1,n))+(1?p)(1?f(m,n?1))}}
将pp视为自变量,问题就转化为两条直线取minmin的问题,求个交点就可以得到最大值。
细节
直线的交点别求错了。。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
首先这个思路不太好想
其次在状态转移时,注意先手是可以两种决策随便选,故存在概率;而后手决策无非两种
脑补一下是这样的把。。
【Codeforces 98E】 Help Shrek and Donkey 游戏策略神题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。