1.巴什博弈
題目一般是兩人輪流每次在n個物品中拿取不超過m個且至少拿乙個,拿光者勝出。
我們可以將n個物品寫成k*(m+1)+b(b>0)所以先手先拿掉b個物品,後手只能拿x個物品(1<=x<=m),這時先手再拿m+1-x個物品,迴圈往復可以保證先手的人最後拿完物品,先手就必勝。當b==0時無論先手怎麼拿,後手只要保證同一回合兩人拿取的物品和等於m+1就可以確保後手必勝。
int n,m;
cin>>n>>m;
if(n%
(m+1)!=
0)cout<<
"first win"
<
else cout<<
"second win"
<
2.威佐夫博弈
int n,m;
double x=
(sqrt(5
)+1)
/2.0
;while(~
scanf
("%d %d"
,&n,
&m))
3.斐波那契博弈一般題目是在一堆n個數量的物品中兩人輪流取,每次至少取1個,但是每次取的數量不能超過上次取的數目的兩倍(n>=2且第一次取的時候不能取完)。
一般這樣問的都是斐波那契博弈,我們只需要記住n是斐波那契數的時候先手必敗。
ll a[60]
,n; a[0]
=1; a[1]
=1;for
(int i=
2;i<=
50;i++
)//可以滿足n在int範圍內
a[i]
=a[i-1]
+a[i-2]
;while(~
scanf
("%lld"
,&n)
)
斐波那契博弈證明
4.尼姆博弈
題目一般是在n堆物品中,每人每次只能在一堆裡面至少拿乙個,無上限,當取完最後乙個時該人獲勝。
結論:對每一堆的數量進行異或運算,當結果是0時先手必敗。
int t;
while(~
scanf
("%d"
,&t))if
(res==0)
printf
("second win\n");
else
printf
("first win\n");
}
當我們要使先手必勝時,首先得滿足所有值異或不等於0,然後可以將其中乙個值o變成其他值異或的值p,其中o應當大於p(從o個物品中拿出x個餘下p個);
比如有5堆,數量分別是1,2,3,4,5;
1 xor 2 xor 3 xor 4 xor 5 = 1;
現在對5進行操作。
1 xor 2 xor 3 xor 4 = 4;//其他值的異或值
1 xor 2 xor 3 xor 4 xor 4 = 0;//將5中拿去1剩下4,異或後變成0;
//給你n個數,求若先手必勝則他第一步有幾種選擇
int n,a[
110]
,ans=
0,cnt=0;
scanf
("%d"
,&n)
;for
(int i=
0;i)for
(int i=
0;i)printf
("%d\n"
,cnt)
;
5.反尼姆博弈題目一般是在n堆物品中,每人每次只能在一堆裡面至少拿乙個,無上限,當取完最後乙個時該人失敗。
計算所有堆中充裕堆的數目cnt(充裕堆指每堆的數量大於1),以及所有堆數量的異或ans;
如果ans == 0 && cnt == 0或者ans != 0 && cnt != 0先手必勝,否則後手必勝。
int ans=
0,cnt=
0,n,num;
scanf
("%d"
,&n)
;for
(int i=
0;i(ans==
0&&cnt==
0||ans!=
0&&cnt!=0)
printf
("first win\n");
else
printf
("second win\n"
);
我們可以參考這張理解反尼姆博弈。
根據這張我們可以進行總結。令ans為所有堆的異或和,cnt為充裕堆的數量。由上述可知t0,s1,s2狀態下先手必勝。
t0:ans==0 && cnt == 0;
s1:ans!=0 && cnt == 1;
s2:ans!=0 && cnt >= 2;
由上可知當先手必勝時ans == 0 && cnt == 0 || ans != 0 && cnt! =0
尼姆博弈與反尼姆博弈證明
幾個經典的博弈
一 巴什博奕 bash game 只有一堆 n個物品,兩個人輪流從這堆物品中取物,規定每次至少取乙個,最多取 m個。最後取光者得勝。顯然,如果 n m 1 那麼由於一次最多只能取 m個,所以,無論先取者拿走多少個,後取者都能夠一次拿走剩餘的物品,後者取勝。因此我們發現了如何取勝的法則 如果n m 1...
幾個經典的博弈
一 巴什博奕 bash game 只有一堆 n 個物品,兩個人輪流從這堆物品中取物,規定每次至少取乙個,最多取 m 個。最後取光者得勝。顯然,如果 n m 1 那麼由於一次最多只能取 m 個,所以,無論先取者拿走多少個,後取者都能夠一次拿走剩餘的物品,後者取勝。因此我們發現了如何取勝的法則 如果 n...
幾個經典的博弈問題
有一種很有意思的遊戲,就是有物體若干堆,可以是火柴棍或是圍棋子等等均可。兩個 人輪流從堆中取物體若干,規定最後取光物體者取勝。這是我國民間很古老的乙個遊戲 別看這遊戲極其簡單,卻蘊含著深刻的數學原理。下面我們來分析一下要如何才能夠 取勝。一 巴什博奕 bash game 只有一堆n個物品,兩個人輪流...