poj 1704 博弈 轉化為取石子

2021-06-07 23:33:54 字數 1538 閱讀 6014

poj

問題描述:georigia和bob玩棋子的遊戲,棋子是排在同一行的,每人每次可以移動乙個棋子,移動的格數不限,但移動只能向左,且不能超過左邊的棋子。當誰沒有棋子可移時,誰就輸了。女士優先原則,georgia總是優先。

解題思路:

我們把棋子按位置公升序排列後,從後往前把他們兩兩繫結成一對。如果總個數是奇數,就把最前面乙個和邊界(位置為0)繫結。

在同一對棋子中,如果對手移動前乙個,你總能對後乙個移動相同的步數,所以一對棋子的前乙個和前一對棋子的後乙個之間有多少個空位置對最終的結果是沒有影響的。

如果對手移動後乙個,就相當於取走石子

於是我們只需要考慮同一對的兩個棋子之間有多少空位。

這樣一來,題目就轉換成了就成了poj 1067 取石子問題,直接對每一段空位置的長度求異或就可以了。

#include #include #define n 1001

int main()

return 0;

}

**)

分類: 博弈

2011-08-16 17:56

493人閱讀收藏

舉報 今天在poj做了一道博弈題..進而了解到了階梯博弈...下面闡述一下我對於階梯博弈的理解..

首先是對階梯博弈的闡述...博弈在一列階梯上進行...每個階梯上放著自然數個點..兩個人進行階梯博弈...每一步則是將乙個集體上的若干個點( >=1 )移到前面去..最後沒有點可以移動的人輸..

如這就是乙個階梯博弈的初始狀態 2 1 3 2 4 ... 只能把後面的點往前面放...如何來分析這個問題呢...其實階梯博弈經過轉換

可以變為nim..把所有奇數階梯看成n堆石子..做nim..把石子從奇數堆移動到偶數堆可以理解為拿走石子..就相當於幾個奇數堆的石子在做nim..( 如所給樣例..2^3^4=5 不為零所以先手必敗)為什麼可以這樣來轉化?

假設我們是先手...所給的階梯石子狀態的奇數堆做nim先手能必勝...我就按照能贏的步驟將奇數堆的石子移動到偶數堆...如果對手也是移動奇數堆..我們繼續移動奇數堆..如果對手將偶數堆的石子移動到了奇數堆..那麼我們緊接著將對手所移動的這麼多石子從那個奇數堆移動到下面的偶數堆...兩次操作後...相當於偶數堆的石子向下移動了幾個..而奇數堆依然是原來的樣子...即為必勝的狀態...就算後手一直在移動偶數堆的石子到奇數堆..我們就一直跟著他將石子繼續往下移..保持奇數堆不變...如此做下去..我可以跟著後手把偶數堆的石子移動到0..然後你就不能移動這些石子了...

所以整個過程..將偶數堆移動到奇數堆不會影響奇數堆做nim博弈的過程..整個過程可以抽象為奇數堆的nim博弈...

其他的情況...先手必輸的...類似推理...只要判斷奇數堆做nim博弈的情況即可...

為什麼是只對奇數堆做nim就可以...而不是

偶數堆呢?...因為如果是對偶數堆做nim...對手移動奇數堆的石子到偶數堆..我們跟著移動這些石子到下乙個奇數堆...那麼最後是對手把這些石子移動到了0..我們不能繼續跟著移動...就只能去

破壞原有的nim而導致勝負關係的不確定...所以

只要對奇數堆做nim判斷即可知道勝負情況...

階梯博弈 POJ 1704

階梯博弈 先借用別人的一幅。1階梯之前還有乙個 0階梯未畫出 階梯博弈的最初定義是這樣的 每乙個階梯只能向它的前乙個階梯移動本階梯的點,直至最後無法移動的為輸。那麼,利用nim,只計算奇數級的異或和,當為 0時,先手必敗。至於為什麼有這樣的,我也能說明白,但下文要討論的是怎麼做 假設這樣個nim 理...

博弈論(階梯博弈)POJ 1704

對階梯博弈的闡述 博弈在一列階梯上進行,每個階梯上放著自然數個點。兩個人進行階梯博弈,每一步則是將乙個集體上的若干個點 1 移到前面去,最後沒有點可以移動的人輸 證明方式 如這就是乙個階梯博弈的初始狀態 2 1 3 2 4 只能把後面的點往前面放 如何來分析這個問題呢 其實階梯博弈經過轉換可以變為n...

poj 1067 取石子遊戲 博弈

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