程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu1846 博弈論經典

hdu1846 博弈論經典

編輯:C++入門知識

今天接觸了博弈論!從最經典的博弈論開始吧!

一堆石子有n塊,甲乙兩人輪流取(1~m)塊石子,規定甲先取,先取光的一方獲勝(即取的最後一塊石子的人獲勝),甲乙都足夠的聰明(甲乙都采用最優的決策策略)。

給出n,m問誰可以獲勝。

先看一些實例:如果m=2;則n=1,n=2時,甲可直接獲勝。n=3時,甲無論怎麼取就會輸,n=4,5時,甲都可以先取一塊,然後剩下的石塊數多於2,所以甲還有機會再取,而且將剩下的取光。n=6時,發現甲無論怎麼取都會輸。

經過實例可以得到一些結論:如果n小於等於m,那麼甲獲得勝利。

如果甲取一次後留下的是(m+1)的整數倍,那麼甲就可以掌控整個游戲從而獲得勝利。接下如果乙取k塊,那麼甲就會取m+1-k塊,甲保證了他們每個回合都取了m+1塊,這樣依次循環下去,直到剩下最後一組m+1的石塊,此時輪到乙取石塊,由於剩下石塊數是m+1塊,所以乙不能去玩,而接下來甲可以取玩從而獲勝。

所以,本題如果n%(m+1)不為0時,即滿足甲取一次後留下m+1的整數倍,那麼甲就獲勝,否則乙獲勝。

這就是傳說中的巴什博弈的基本應用。

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved