同樣威佐夫也有乙個經典的例題:
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;
1intn,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 有兩堆石子,數量任意,可以不同。遊戲開始由兩個人輪流取石子。遊戲規定,每次有兩種不同的取法,一是可以在任意的一堆中取走任意多的石子 二是可以在兩堆中同時取走相同數量的石子。最後把石子全部取完者為勝者。現在給出初始的兩堆石子的數目,如果輪到你先取,假設雙方都採取最好的策略,問最...