大白書 2 4節 組合遊戲(博弈論)

2021-07-08 14:46:25 字數 1942 閱讀 2026

大白書 2.4節 組合遊戲

博弈論筆記:

1)必勝必敗狀態:

a)乙個狀態為必勝狀態,充要條件是後續狀態有乙個必敗狀態

b)乙個狀態為必敗狀態,充要條件是後續狀態全是必勝狀態

2)sg函式

a)定義:sg[i] =

b)乙個狀態為必敗狀態,當且僅當這個狀態的sg值為0

c)通常可以用暴力的方法求出參見第二道題,資料過大時參見第一道題

3)nim和與sg函式的應用

a)nim和:乙個父遊戲的狀態等於子遊戲狀態的異或和。

b)乙個遊戲的sg值,等於所有子遊戲的sg值的異或和

uva 1146

看的題解

找規律,n為偶數sg值為n/2,奇數為sg[i] = sg[i/2]

原始碼:

#include 

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define ll long long

ll sg(ll u)

int main()

if(state == 0) printf("no\n");

else

printf("yes\n");

}return

0;}

uva 10561

看的題解和別人**

對於乙個x,存在控制區間即[x-2,x+2],在這個區間內放x就輸了。

然後根據這個性質得出sg函式以及的特判輸贏的情況。

然後列舉每個不在控制區間、不為x的位置變成1後sg是否為0,得出所有位置的解。

原始碼:

#include 

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 200 + 5;

int vis[maxn];

int sg[maxn];

void init()

vis[sg[l] ^ sg[r]] = 1;

}for(int j = 0 ; ; j++)}}

}char op[maxn];

int ts[maxn], s[maxn];

int n;

vector

ans;

bool check1()

return ok;

}int sg()

else cnt++;

}// printf("cnt = %d\n", cnt);

state ^= sg[cnt];

// printf("state = %d\n", state);

return state;

}int main()

for(int i = 1 ; i <= n ; i++)}}

if(check1())

printf("\n");

continue;

}else

if(sg() == 0)

else

}printf("winning\n");

int f = 1;

for(vector

::iterator it = ans.begin() ; it != ans.end() ; it++)

printf("\n");}}

return

0;}

組合遊戲與博弈論 學習筆記

i was standing all alone against the world outside 忘記在 看到,很適合用這句歌詞來描述john nash 1.組合遊戲略述 sg遊戲的若干拓展及變形 賈志豪 2.上面那篇 裡的參考文獻.遊戲有兩個人參與,二者輪流做出決策。且這兩個人的決策都對自己最...

魔法遊戲 博弈論

題目大意 給一顆樹,每個位置有乙個權值,每次乙個人可以選擇森林中的某棵樹的根節點,設其權值為a aa,那麼這個人可以選擇乙個k 2,a 1 k in 2,a 1 k 2,a 1 然後讓a aa變成 ak left lfloor frac ak right rfloor ka 如果乙個點權值變為0那麼...

博弈論 Nim遊戲

這種遊戲稱為nim博弈,遊戲過程中面臨的狀態成為局面。n im nimni m博弈不存在平局,只有先手必勝和先手必敗兩種情況。定理nim 博弈先手 必勝,當 且僅當a 1xora2 xor xoran 0nim博弈先手必勝,當且僅當 a 1 texta 2 text cdots text a n n...