常見的博弈論有巴什博弈,威佐夫博弈,尼姆博弈,斐波那契博弈等等,今天暫時講幾個
二.威佐夫博奕
三.環形博弈
巴什博奕:只有一堆n個物品,兩個人輪流從中取物,規定每次最少取乙個,最多取m個,最後取光者為勝。
顯然,如果n=m+1,那麼由於一次最多只能取m個,所以,無論先取者拿走多少個,後取者都能夠一次拿走剩餘的物品,後者取勝。
因此我們可以推算出:如果n=(m+1)*r+s,(r為任意自然數,s≤m),那麼先取者要拿走s個物品,如果後取者拿走k(≤m)個,那麼先取者再拿走m+1-k個,結果剩下(m+1)(r-1)個,以後保持這樣的取法,那麼先取者肯定獲勝。
總之,要保持給對手留下(m+1)的倍數,就能最後獲勝。
也就是若n%(m+1)==0,則先手必輸
變形:如果條件不變,改成最後取光的人失敗
結論:若(n-1)%(m+1)== 0 ,則後手勝利
if
(n%(m+1)
==0) cout<<
"後手必勝"
"先手必勝"
(a>b)
swap
(a,b)
; ans=
floor
((b-a)*(
1+sqrt
(5.0))
/2.0);
if(ans==a) cout<<
"後手必勝"
"先手必勝"
<今天乙個同學問我,我才想起來這個。。。
如果n<=k,先手必贏(也就是如果先手能一次拿完就輸)
當k等於1時,n為奇先手勝,n為偶後手勝。
因為是環形,假如說a第一次沒去完,那b只要取與a相對的石頭,也就是a拿完後,還剩奇數個石頭,b就拿與a對應位置的乙個石頭,如果剩偶數個,就拿對應位置的兩個
這樣就把乙個環拆分成兩個鏈,且每個鏈都是相等的
用sg定理,sg[x] ^ sg[x]= 0
這就是必敗態,所以先手a輸了
當k=1時,這就不用我講了吧。。。
bool
circle_game
(int n,
int k)
例題 hdu - 3951 博弈論講解(二)
尼姆博奕 nimm game 公平組合博弈 impartial combinatori games 理論知識 1 若面臨末狀態者為獲勝則末狀態為勝態否則末狀態為必敗態。2 乙個局面是勝態的充要條件是該局面進行某種決策後會成為必敗態。3 乙個局面是必敗態的充要條件是該局面無論進行何種決策均會成為勝態 ...
博弈論講解(二)
尼姆博奕 nimm game 公平組合博弈 impartial combinatori games 理論知識 1 若面臨末狀態者為獲勝則末狀態為勝態否則末狀態為必敗態。2 乙個局面是勝態的充要條件是該局面進行某種決策後會成為必敗態。3 乙個局面是必敗態的充要條件是該局面無論進行何種決策均會成為勝態 ...
博弈論 Nim博弈
1.nim博弈的起源很早,至於歷史我們就不再說了,直接說它的使用場景。1 依舊是兩個人博弈,但是物品時n堆,每一堆有ai個。2 每個人可以挑選一堆取走若干個,但是不能不取。3 最先取完所有物品的人獲勝。4 結論 所以堆的物品的數量異或起來是0,先手必敗。2.乙個nim博弈的例項 nim博弈。乍一看這...