孤單堆的根數異或只會影響二進位制的最後一位,但充裕堆會影響高位(非最後一位)。乙個充裕堆,高位必有一位不為0,則所有根數異或不為0。故不會是t態。
[定理5]:s0態,即僅有奇數個孤單堆,必敗。t0態必勝。
證明:s0態,其實就是每次只能取一根。每次第奇數根都由己取,第偶數根都由對
方取,所以最後一根必己取。敗。同理, t0態必勝#
[定理6]:s1態,只要方法正確,必勝。
證明:若此時孤單堆堆數為奇數,把充裕堆取完;否則,取成一根。這樣,就變成奇數個孤單堆,由對方取。由定理5,對方必輸。己必勝。 #
[定理7]:s2態不可轉一次變為t0態。
證明:充裕堆數不可能一次由2變為0。得證。 #
[定理8]:s2態可一次轉變為t2態。
證明:由定理1,s態可轉變為t態,態可一次轉變為t態,又由定理6,s2態不可轉一次變為t0態,所以轉變的t態為t2態。 #
[定理9]:t2態,只能轉變為s2態或s1態。
證明:由定理2,t態必然變為s態。由於充裕堆數不可能一次由2變為0,所以此時的s態不可能為s0態。命題得證。
[定理10]:s2態,只要方法正確,必勝.
證明:方法如下:
1) s2態,就把它變為t2態。(由定理8)
2) 對方只能t2轉變成s2態或s1態(定理9)
若轉變為s2, 轉向1)
若轉變為s1, 這己必勝。(定理5)
[定理11]:t2態必輸。
證明:同10。
綜上所述,必輸態有: t2,s0
必勝態: s2,s1,t0.
兩題比較:
第一題的全過程其實如下:
s2->t2->s2->t2-> …… ->t2->s1->t0->s0->t0->……->s0->t0(全0)
第二題的全過程其實如下:
s2->t2->s2->t2-> …… ->
t2->s1->s0->t0->s0
->……->s0->t0(全0)
下劃線表示勝利一方的取法。 是否發現了他們的驚人相似之處。
我們不難發現(見加黑部分),s1態可以轉變為s0態(第二題做法),也可以轉變為
t0(第一題做法)。哪一方控制了s1態,他即可以有辦法使自己得到最後一根**變為
t0),也可以使對方得到最後一根**變為s0)。
所以,搶奪s1是制勝的關鍵!
為此,始終把t2態讓給對方,將使對方處於被動狀態,他早晚將把狀態變為s1.
nim staircase博奕(階梯博弈)
首先是對階梯博弈的闡述...博弈在一列階梯上進行...每個階梯上放著自然數個點..兩個人進行階梯博弈...每一步則是將乙個集體上的若干個點( >=1 )移到前面去..最後沒有點可以移動的人輸..
如這就是乙個階梯博弈的初始狀態 2 1 3 2 4 ... 只能把後面的點往前面放...如何來分析這個問題呢...其實階梯博弈經過轉換
可以變為nim..把所有奇數階梯看成n堆石子..做nim..把石子從奇數堆移動到偶數堆可以理解為拿走石子..就相當於幾個奇數堆的石子在做nim..( 如所給樣例..2^3^4=5 不為零所以先手必敗)為什麼可以這樣來轉化?
假設我們是先手...所給的階梯石子狀態的奇數堆做nim先手能必勝...我就按照能贏的步驟將奇數堆的石子移動到偶數堆...如果對手也是移動奇數堆..我們繼續移動奇數堆..如果對手將偶數堆的石子移動到了奇數堆..那麼我們緊接著將對手所移動的這麼多石子從那個奇數堆移動到下面的偶數堆...兩次操作後...相當於偶數堆的石子向下移動了幾個..而奇數堆依然是原來的樣子...即為必勝的狀態...就算後手一直在移動偶數堆的石子到奇數堆..我們就一直跟著他將石子繼續往下移..保持奇數堆不變...如此做下去..我可以跟著後手把偶數堆的石子移動到0..然後你就不能移動這些石子了...
所以整個過程..將偶數堆移動到奇數堆不會影響奇數堆做nim博弈的過程..整個過程可以抽象為奇數堆的nim博弈...
其他的情況...先手必輸的...類似推理...只要判斷奇數堆做nim博弈的情況即可...
為什麼是只對奇數堆做nim就可以...而不是
偶數堆呢?...因為如果是對偶數堆做nim...對手移動奇數堆的石子到偶數堆..我們跟著移動這些石子到下乙個奇數堆...那麼最後是對手把這些石子移動到了0..我們不能繼續跟著移動...就只能去
破壞原有的nim而導致勝負關係的不確定...所以
只要對奇數堆做nim判斷即可知道勝負情況...
推薦hdoj題目
看完上面的結論,就能順利解決上面2道了
s-nim
博弈演算法入門小節 1536 1517 1907
小子最近迷途於博弈之中。。。感觸頗深。
為了讓大家能夠在學習博弈的時候少走彎路,最重要的也是為了加深自己的影響,溫故而知新,特發此貼與大家共勉。
學博弈先從概念開始:
這個課件個人認為從博弈的基本思想,一直到解博弈的中心演算法做了很好的詮釋。但是特別要注意的是。課件後面一部分英語寫的講義是重中之重。小子英語很弱,在這困擾很久。現在為大家大概介紹一下。
主要是後繼點和sg值的問題:
sg值:乙個點的sg值就是乙個不等於它的後繼點的sg的且大於等於零的最小整數。
後繼點:也就是按照題目要求的走法(比如取石子可以取的數量,方法)能夠走一步達到的那個點。
具體的有關sg值是怎麼運用的希望大家自己多想想。
課件後面有乙個1536的**。可以放在後面做做
1847(求sg值)
有了上面的知識接下來我們來看看組合博弈(n堆石子)
博弈-取石子遊戲(推薦等級五星級)
這裡提出了乙個奇異狀態的問題。看了這篇文章你會發現異或運算在博弈中使用的妙處。當然這裡指出的只是組合博弈中一種特殊情況。
王道還是對sg值的求解,但是知道這麼一種思路無疑對思維的廣度和深度擴充套件是很有幫助的。
zz博弈
這裡介紹了組和博弈的兩種大的型別,一種是最後取的是n狀態一種是最後取的是p狀態,兩個狀態的解題方法能看懂很有幫助。當然,能夠把推導過程理解,吃透無疑是大牛級的做法~小子也佩服的緊~
1536題推薦做做這題,這題前面提醒大家是乙個求sg值的題目,題目前面是對異或運算運用在組合博弈問題中的很好的解釋。當然題目本身是有所不同的。因為在這裡面對取法有所要求。那麼這樣就回歸到了解決博弈問題的王道演算法——求sg值上。
有關運用求sg值的博弈題目有: 1850(也可基於奇異狀態異或)
1848(中和的大斐波那契數列的典型求sg值題)
1517(個人認為有點猥瑣的題目。。。。在此題上困擾很久。當然搞出來很開心。小子是用比較規矩的求sg值的方法求出來的,但是論壇有人對其推出來了規律,這裡佩服一下,大家可以學習一下)
1079(更猥瑣的題目,對新手要求較高,因為按傳統方法需要比較細緻的模擬加對邊角狀態的考慮,同樣有人推出來了公式)
當你全部看完以上的東西。做完以上的題目的話。。。小子恭喜你~你博弈入門了~~~~
這裡小子告訴大家。博弈很強大。學習要耐心~謝謝
博弈論小結
博弈論,今天算是告一段落了。博弈模型為兩個人輪流決定的非合作博弈,即兩個人輪流進行決策,並且每次都會採用最優策略。博弈模型必須是有限布可以完成的。對兩個人的規則是公平的。p狀態 必敗態 前乙個選手 previous player 將取勝的位置稱為必敗點。n狀態 必勝態 下乙個選手 next play...
博弈論小結
博弈論問題一般是,兩人都採取最優的策略進行博弈,判讀兩人勝負。博弈論一般分為以下幾種 這只是一篇結論性的文章。不會證明 必勝態 當前狀態按照最優策略一定必勝。必敗態 相反,就是必敗態。p position 先手必敗。上次move的人有必勝策略。即這次move的人必敗。n position 先手必勝。...
博弈論學習小結
最近學習了一下博弈論的一些知識,也做了一些題目,下面本人對三種比較基本的博弈知識作如下小結 1 巴什博奕 給對手留下 m 1 的倍數即可勝。如一堆n個物品,最多取m個,最少1個 if n m win else if n m 1 m n m 1 1 win else lose 2 威佐夫博奕 兩堆物品...