博弈問題總集第一類 求SG函式出解

2021-08-13 20:10:52 字數 1363 閱讀 7519

這一類是最簡單的入門級別啦,這些博弈問題的大前提來自優秀的學姐

求sg函式通常用dp||記憶化搜尋

poj2975 nim

這個題的題目描述就是我們跟蹤**會看到的過程

求nim遊戲獲勝的方案,其實就是求第一步可以從哪些堆裡拿。可以發現sg

i (第i堆石子)假如有k個,ta的後繼狀態可以轉移到0~k-1,那麼我們根據sg函式的定義可以知道sg[i]=a[i]

這裡再提一點就是k^a[i]表示總的sg值去掉這一堆石子的sg值,我們為了讓總的sg值為0,就要讓這一堆也就是第i堆石子的sg值為k^a[i],要想讓k^a[i]在取值範圍內,【根據sg函式的求法mex】,只有當(k^a[i]) < a[i]時,k^a[i]是sg

i 的後繼狀態,在ta的取值範圍內

剩下的下方普及向見咯!

#include 

using

namespace

std;

int n,a[1005];

int main()

}

poj2960 s-nim

似乎是ta怎麼說你怎麼做求一波sg函式就完結了?要時刻把握sg函式的性質式,這個題目描述寫的特別好

#include 

#include

#include

using

namespace

std;

int rule[105],a[105],n,sg[10005],m;bool ext[10005];

void get_sg()

}}int main()

printf("\n");

}}

poj2425 a chess game

要用記憶化搜尋求sg函式,注意sg函式是乙個數字!乙個狀態的sg取決於ta的後繼,後繼所有sg的mex

#include 

#include

using

namespace

std;

int tot,nxt[499500],point[1005],v[499500],sg[1005];

void addline(int x,int y)

int get_sg(int x)

for (int i=0;;i++)

if (!ext[i])

return sg[x];

}int main()

while (scanf("%d",&m)&&m)

if (!k) printf("lose\n");else

printf("win\n");}}

}

Python 函式是第一類物件

在很多資料中,經常會看到這樣一句話 python 中的函式是第一類物件 這裡所說的第一類物件,其實是指函式作為乙個物件,與其他物件具有相同的地位。關於這一點,guido 曾提過 first class everything 他對 python 的乙個發展目標就是所有的物件都是第一類物件。也就是說,所...

Python 函式的第一類物件 使用

函式的第一類物件及使用 第一類物件 特殊點 可以當做值被賦值給變數 def func print 1 print func a func a 2.可以當做元素存放在容器中 def func print 1 lst func,func,func for i in lst i 3.函式名可以當做函式的引...

在python中函式是第一類物件

python中,所有的元素都是物件,其中第一類物件的通用特性 可作為值傳遞,賦值給另乙個物件 可以作為元素新增到集合物件中 可以作為引數傳遞給其他函式 可以作為函式的返回值 1,賦值給變數 def f1 str return len str temp f1 print temp hello 2,新增...