例題:
guns和roses是兩個好朋友,這一天他們比賽吃葡萄。假定他們有ans顆葡萄。
在比賽之前他們會首先確定每次吃葡萄的數量的最大值為s,和ans的具體值。
兩個人輪流吃葡萄,每次最多吃s顆,不能不吃。(即假定每次吃m顆葡萄,則 1<=m<=s)
遊戲規定在誰吃完葡萄後,他們兩個人所吃的葡萄總和等於ans,誰就獲勝。
假定他們兩人足夠聰明,在吃葡萄的過程中都不會使值大於ans。
現在規定guns先手,請你幫助他計算為了確保最終取得勝利,他第一次應該吃多少顆葡萄?
若第一次無論吃多少顆葡萄,最終都無法取得勝利,請你輸出 -1 。
解題思路:
就是遞推,如果先手想要獲得勝利,那麼就需要在先手倒數第二次取的時候,還剩下(1+s)顆,這樣的話,無論後面的人如何取,都一定輸了。分析這個樣例 ans=9,s=4.倒著分析,如果要想達到還剩4+1顆時,也就是第一次先手拿了四顆,這樣的話,無論後手拿多少顆,剩下的顆數一定小於5,那麼先手穩贏。
**:#include
using namespace std;
int main()
else
cout<}return 0;
}
博弈之 巴什博弈
博弈乍看都是乙個高大上的詞語 巴什博弈的主要內容 只有一堆n個物品,兩個人輪流從這堆物品中取物,規定每次至少取乙個,最多取m個。最後取光者得勝。其中它強調的是只有一堆物品 如果n m個 那麼先拿的一定會贏,如果n m 1 個,那麼第乙個人無論拿多少,第二個人一定會最後取光,如果n m 1 n 那麼只...
博弈 巴什博弈
只有一堆n個物品,兩個人輪流從這堆物品中取物,規定每次至少取乙個,最多取m個。最後取光者得勝。顯然,如果n m 1,那麼由於一次最多只能取m個,所以,無論先取者拿走多少個,後取者都能夠一次拿走剩餘的物品,後者取勝。因此我們發現了如何取勝的法則 如果n m 1 r s,r為任意自然數,s m 那麼先取...
數論 博弈 巴什博弈 BAshGame
巴什博弈 一堆物品有n個,兩個人輪流從這堆物品中取物,規定每次至少取乙個,最多取m個。最後取光者得勝。當石子有1 m個時,毫無疑問,先手必勝 當石子有m 1個時,先手無論拿幾個,後手都可以拿乾淨,先手必敗 當石子有m 2 2m時,先手可以拿走幾個,剩下m 1個,先手必勝 我們不難發現,面臨m 1個石...