1.nim博弈的起源很早,至於歷史我們就不再說了,直接說它的使用場景。(1)依舊是兩個人博弈,但是物品時n堆,每一堆有ai個。(2)每個人可以挑選一堆取走若干個,但是不能不取。(3)最先取完所有物品的人獲勝。(4)結論:所以堆的物品的數量異或起來是0,先手必敗。
2.乙個nim博弈的例項:nim博弈。乍一看這題和nim博弈有啥關係?其實仔細分析之後它就是個nim博弈。首先n行,其實就是有n堆的物品,每一行a,b之間的間隔,其實就是這堆物品的數量,為什麼這樣說,因為a和b都可以走格仔,就相當於都可以拿走物品,但是這裡有乙個問題,a,b的方向不一定就是相對的啊,他倆可以向同乙個方向跑啊。那麼如果我們繼續使用剛才的觀點解釋,那麼這裡不就是在增加二者之間的距離,也就是在該堆物品中加入新的物品,那麼對於先手來說,它就有可能改變自己的必敗態(假設先手現在是必敗態),那麼這不是nim博弈啊。顯然,我們在思考這個問題的時候,把博弈的另一方當成了傻子,事實上,他是很聰明的。假設先手現在時必敗態,那麼對應他自己就是必勝態,先手如果通過剛才我們描述的方式來增大二者之間的距離,改變自己的必敗態,這個時候後手其實很輕鬆就瓦解掉這個小把戲,行把,你不是加嗎?那我就減唄,他可以朝著相同的方向移動相同的步數,這樣就維持了自己的必勝態。所以,這個題還是nim博弈。
3.分析好了之後,**寫起來就很簡單了。
#include#pragma warning(disable:4996)
/*nim博弈:
(1)二人博弈
(2)n堆物品
(3)任何一方可以選擇一堆物品並且拿走若干個,但是不能不拿
(4)先拿完所有物品的選手獲勝
*/using namespace std;
int main()
if (ans)
else
}}
Nim博弈(博弈論)
1.題目 給定n堆石子,兩位玩家輪流操作,每次操作可以從任意一堆石子中拿走任意數量的石子 可以拿完,但不能不拿 最後無法進行操作的人視為失敗。問如果兩人都採用最優策略,先手是否必勝。思路 必勝狀態 a1 a2 an 0 可以走到某乙個必敗狀態 必敗狀態 a1 a2 an 0 走不到任何乙個必敗狀態 ...
博弈論 Nim博弈 反Nim博弈 SG函式
nim遊戲 hdu1846 若各堆石子異或和為不為零,則先手勝 後手當且僅當異或和為零時取勝 此題問要想先手取勝第一步的取法,考慮到上述引理,只需遍歷一遍石子找到異或和的最高位匹配的個數。int a 105 int main return0 view code hdu 1848 在上題的基礎上取法只...
博弈論 Nim遊戲
這種遊戲稱為nim博弈,遊戲過程中面臨的狀態成為局面。n im nimni m博弈不存在平局,只有先手必勝和先手必敗兩種情況。定理nim 博弈先手 必勝,當 且僅當a 1xora2 xor xoran 0nim博弈先手必勝,當且僅當 a 1 texta 2 text cdots text a n n...