威佐夫博弈

2022-03-01 08:17:55 字數 1002 閱讀 4759

同樣威佐夫也有乙個經典的例題:

1.有兩堆數量分別為 n,m個石子的石子堆;

2.兩個人輪流取石子,可以在一堆石子中取任意個,或者,在兩堆石子中每堆石子取相同數目的石子;

輸出:如果先手贏,輸出1,否則輸出0。

題解:首先,當n=0,m=0時,先手輸。

n=1,m=1時,先手贏。

n=2,m=1時,先手輸。

n=3,m=5時,先手輸。

n=4,m=7時,先手輸。

n=6,m=10時,先手輸。

根據規律,發現他們的差值是遞增的,為 0,1,2,3,4,5,6......n,

再找規律,你會發現:

第乙個值=差值*1.618;

1.618=(sqrt(5)+1)/2;

1

intn,m,a,b;

23 a=max(n,m);

4 b=min(n,m);56

if(a-b==(sqrt(5)+1)/2

)7 printf("

0\n");8

else

9 printf("

1\n");

下面來看看威佐夫博弈常見的其他問題:

1)給你乙個局面,讓你求是先手輸贏。

有了上面的分析,那麼這個問題應該不難解決。首先求出差值,差值 * 1.618 == 最小值 的話後手贏,否則先手贏。(注意這裡的1.618最好是用上面式子計算出來的,否則精

度要求高的題目會錯)

2)給你乙個局面,讓你求先手輸贏,假設先手贏的話輸出他第一次的取法。

首先討論在兩邊同時取的情況,很明顯兩邊同時取的話,不論怎樣取他的差值是不會變的,那麼我們可以根據差值計算出其中的小的值,然後加上差值就是大的乙個值,當

然能取的條件是求出的最小的值不能大於其中小的一堆的石子數目。

加入在一堆中取的話,可以取任意一堆,那麼其差值也是不定的,但是我們可以列舉差值,差值範圍是0 --- 大的石子數目,然後根據上面的理論判斷滿足條件的話就是一種合理的取法。

博弈 威佐夫博弈

有兩堆各若干個物品,兩個人輪流從某一堆或同時從兩堆中取同樣多的物品,規定每次至少取乙個,多者不限,最後取光著得勝。奇異局勢的性質 1.任何自然數都包含在乙個且僅有乙個奇異局勢中 2.任何操作都可以將奇異局勢變為非奇異局勢 3.採用適當的方法,可以將非奇異局勢變為奇異局勢。所以面對非奇異局勢,先手必勝...

威佐夫博弈

威佐夫博奕 wythoff game 有兩堆各若干個物品,兩個人輪流從某一堆或同 時從兩堆中取同樣多的物品,規定每次至少取乙個,多者不限,最後取光者得勝。這種情況下是頗為複雜的。我們用 ak,bk ak bk k 0,1,2,n 表示 兩堆物品的數量並稱其為局勢,如果甲面對 0,0 那麼甲已經輸了,...

威佐夫博弈

description 有兩堆石子,數量任意,可以不同。遊戲開始由兩個人輪流取石子。遊戲規定,每次有兩種不同的取法,一是可以在任意的一堆中取走任意多的石子 二是可以在兩堆中同時取走相同數量的石子。最後把石子全部取完者為勝者。現在給出初始的兩堆石子的數目,如果輪到你先取,假設雙方都採取最好的策略,問最...