【題目描述】
給出兩堆石子數目,兩個人輪流去取.每次取的時候,只能從較多的那堆石子裡取,並且取的數目必須是較少的那堆石子數目的整數倍.最後誰能夠把一堆石子取空誰就算贏.
【題目鏈結】
【演算法】
當前狀態總可以用(a,b)表示,其中a = n*b + c,則共有三種情況:c = 0, 則當前手贏
n>=2, 由於對任意一種狀態輸贏是確定的,那麼按當前手取到(b,c)狀態對於當前手的輸贏情況進行區分。若(b,c)狀態會讓當前手贏,則最優取法自然是n*b;反之,若當前手取到(b,c)會輸,那麼顯然對方取到(b,c)也會輸,所以當前手的最優取法自然是(n-1)*b。所以不論哪種情況,當前手的最優取法都能讓他贏。
n==1, c != 0,此時當前手只能取b,問題遞迴到接下去(b,c)的1,2,3情況
【**】
#include usingnamespace
std;
inta,b;
bool dfs(int x,int
y)int
main()
return0;
}
取石子遊戲
如下 include include intmain k b a temp floor k 1.0 sqrt 5 2.0 if temp a printf 0 n else printf 1 n return 0 一 巴什博奕 bash game 只有一堆n個物品,兩個人輪流從這堆物品中取物,規定每...
取石子遊戲
有兩堆石子,數量任意,可以不同。遊戲開始由兩個人輪流取石子。遊戲規定,每次有兩種不同的取法,一是可以在任意的一堆中取走任意多的石子 二是可以在兩堆中同時取走相同數量的石子。最後把石子全部取完者為勝者。現在給出初始的兩堆石子的數目,如果輪到你先取,假設雙方都採取最好的策略,問最後你是勝者還是敗者。in...
取石子遊戲
取石子遊戲 time limit 1000ms memory limit 10000k total submissions 25176 accepted 7961 description 有兩堆石子,數量任意,可以不同。遊戲開始由兩個人輪流取石子。遊戲規定,每次有兩種不同的取法,一是可以在任意的一堆...