1、巴什博弈
一堆石子,有n個,兩個人輪流取,每次至少取1個,至多取m個,拿走最後乙個石子的人獲勝
假設一堆石子有 n=m+1 由於一次只能取m個,無論先手取多少個,後手總能拿走剩餘的,這時一定是先手負
於是找到取勝規則:
一對石子 n=(m+1)*r+s
對於先手應該先取走s個,設後手取走k個,先手再取走 m+1-k 剩餘的石子個數為 (m+1)(r-1) 以後保持這樣的取法,先取者獲勝
總之,就是要留給對手 m+1的倍數
可以歸結為: s=0時,後手勝
s<>0時,先手勝
2、簡單的石子遊戲
有n堆石子,每次至少取一根,至多拿走整堆,兩人輪流拿,每次限拿其中一堆,取走最後一根的獲勝。
2023年獲勝策略已由美國數學家c.l.bouton分析完成,用到的是二進位制和平衡狀態概念。其結論是:
對於n堆石子,第i (1<=i<=n)堆石子的個數是xi,該狀態為必敗狀態當且僅當 x1 xor x2 xor……xn=0。
看個例子:
有4堆石子,數量分別為:7 9 12 15
二進位制形式為
0111
1001
1100
1111
異或結果為:1101
1101^1001=0100=4 可以從第二堆拿走5個
1101^1100=0001=1 也可以從第三堆拿走11個
1101^1111=0010=2 或者從第四堆取走13個
比如這道題:
給定n堆石子,兩人輪流取石子,必須先取完一堆石子才能取另一堆,而且另一堆石子的個數必須比之前取的那一堆小,每次只能取1個或者質數個石子。如果沒有石子可以取了,那麼他就輸了。問先手是否有必勝策略。
其實對於這個遊戲,我們只需要判斷第一堆石子即可,也就是石子數目最少的那一堆
**:
#include#includeview code#include
using
namespace
std;
int isprime(int
n)
return1;
}int
main()
else
a[0]=a[0]+j; //
恢復石子數目
}
if(x!=0
) cout
<
<
}return0;
}
3、nim遊戲
有n堆石子,每堆石子的數量為 x1, x2, x3,x4......xn。給定k個數a1,a2,a3,……ak 兩人輪流取,每人每次只能選取一堆,
從中取出一些,每次所取的數量一定在a1,a2,a3,……ak中,拿走最後一根的人獲勝。
我們可以將遊戲分解,把每一堆看成是乙個子遊戲。
比如,有3堆石子,每堆石子的數目,為5,6,7,可以取的石子的數目是
可以找出每堆石子的所有後繼狀態,看成是n枚棋子在有向圖上移動,甲乙雙方人選乙個子遊戲並移動上面的棋子。
看起來狀態非常多,也很複雜,所以我們需要借鑑sg函式
首先定義乙個mex 運算,表示最小的不屬於這個集合的非負整數。例如mex=3、mex=0、mex{}=0。
對於乙個給定的有向無環圖,關於每個頂點的sg函式定義如下:
g(x)=mex;沒有出邊的頂點,sg值為0,因為它的後繼集合為空。
對於n枚棋子,它們對應頂點的sg值分別為:(a1,a2,……,an)再設局面 (a1,a2,……,an)時nim遊戲的一種必勝策略是 將ai變成k,那麼遊戲的一種必勝策略就是
把第i枚棋子移動到sg值為k的頂點上;
#includeusingview codenamespace
std;
/*輸入堆數 n,每堆的石子數a
輸入限定選擇的數目 k, 是s
*/int max(int a,int
n)
returnm;}
intmain()
for(int k=1;;k++) }}
int x=0
;
for(i=0;i)
x^=grund[a[i]];
if(x==0) cout<
先手勝"
<
else
cout
<
後手勝"
<
}return0;
}
很好的部落格對博弈的解釋:
博弈知識彙總
顯然,如果n m 1,那麼由於一次最多只能取m個,所以,無論先取者拿走多少個,後取者都能夠一次拿走剩餘的物品,後者取勝。因此我們發現了如何取勝的法則 如果n m 1 r s,r為任意自然數,s m 那麼先取者要拿走s個物品,如果後取者拿走k m 個,那麼先取者再拿走m 1 k個,結果剩下 m 1 r...
組合遊戲(博弈)
昨天看大白書翻到了組合遊戲這章,看著發覺原來是博弈論的內容,於是便看下去了。真是不看不知道,一看才知道自己的水平有多弱,不過好在還是集中精神地看了大部分。從nim遊戲 n堆石子,每人每次可以從任意一堆中取至少1個 至多整堆的石子,不能取者為輸 開始講起,引入必勝態 必敗態的概念 1.乙個狀態是必敗狀...
博弈 塗色遊戲
在乙個2 n的格仔上,alice和bob又開始了新遊戲之旅。這些格仔中的一些已經被塗過色,alice和bob輪流在這些格仔裡進行塗色操作,使用兩種塗色工具,第一種可以塗色任意乙個格仔,第二種可以塗色任意乙個2 2的格仔。每一輪遊戲裡,他們可以選擇一種工具來塗色尚未被染色的格仔。需要注意,塗色2 2的...