poj:
非常經典的巴什博弈,兩個人都依次報數,每乙個每次可以報1-m的數,把他們兩個說的數加起來,誰先加到n(大於等於),誰就贏,兩個人都非常地聰明,都想自己能贏。
假設現在有兩個人a,b。假設a先數,怎麼能確保自己贏呢?第一步該說多少?其實這個n,中間地很多都是無效地,我們可以直接將r =n%(m+1),如果r等於0,那麼a一定贏不了,如果r不等於0,那麼a一定會贏,為什麼?
如果r=0,說明了n為m+1的整數倍,那麼不管a數多少,假設a數的數為ai,b只需要數(m-ai+1),最終就能是b一定是先到達這個結果的人,因為n為m+1的整數倍。
如果r!=0,說明n不為m+1的整數倍,那麼a第一步只需要數n%(m+1),他就一定能贏,因為n - (n%(m+1))的結果是(m+1)的整數倍,情況就跟上面一樣了,只不過上面是a先數,這裡因為a先數了n%(m+1),所以剩下的子問題就變成了b先數,所以a肯定會贏
**實現:
int m,n;
int main()
else if(n/(m+1))else
printf("\n");}}
return 0;
}
HDU2149 巴什博弈
description 雖然不想,但是現實總歸是現實,lele始終沒有逃過退學的命運,因為他沒有拿到獎學金。現在等待他的,就是像farmjohn一樣的農田生涯。要種田得有田才行,lele聽說街上正在舉行一場別開生面的拍賣會,拍賣的物品正好就是一塊20畝的田地。於是,lele帶上他的全部積蓄,衝往拍賣...
hdu 2149 hdu 1846 巴什博弈)
首先介紹一下巴什博奕 bash game 只有一堆n 個物品,兩個人輪流從這堆物品中取物,規定每次至少取乙個,最多取m 個。最後取光者得勝。分析 顯然,如果n m 1 那麼由於一次最多只能取 m個,所以,無論先取者拿走多少個,後取者都能夠一次拿走剩餘的物品,後者取勝。因此我們發現了如何取勝的法則 如...
博弈 巴什博弈
只有一堆n個物品,兩個人輪流從這堆物品中取物,規定每次至少取乙個,最多取m個。最後取光者得勝。顯然,如果n m 1,那麼由於一次最多只能取m個,所以,無論先取者拿走多少個,後取者都能夠一次拿走剩餘的物品,後者取勝。因此我們發現了如何取勝的法則 如果n m 1 r s,r為任意自然數,s m 那麼先取...