1. 程式人生 > >【Codeforces 98E】 Help Shrek and Donkey 遊戲策略神題

【Codeforces 98E】 Help Shrek and Donkey 遊戲策略神題

html str 直線 最終 view lns 是否 最優 rip

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 遊戲策略神題