BZOJ3895 取石子(博弈 記搜)

2021-07-16 18:59:54 字數 506 閱讀 4304

傳送門

我們可以通過石子的堆數和每一堆的個數計算出剩餘的運算元,顯然運算元為奇先手必勝,為偶先手必敗。

若將=1的石子堆單獨考慮,對於若干堆》1的石子,運算元為∑n

i=1x

i 。

那麼我們可以記f[a][b]表示有a堆=1的石子,>1的石子運算元為b的狀態(1表示先手必勝,0表示先手必敗),然後進行記搜,對於a!=0的情況分類討論,即可得出正確的解。

#include

#include

#include

using

namespace

std;

int t,n,x;

int f[100][51000];

inline

int dp(int a,int b)

int main()

b--;

puts(dp(a,b)?"yes":"no");

}}

1、博弈的題考慮記搜

bzoj 3895 取石子(博弈 記憶化搜尋)

time limit 1 sec memory limit 512 mb submit 267 solved 130 submit status discuss alice和bob兩個好朋含友又開始玩取石子了。遊戲開始時,有n堆石子 排成一排,然後他們輪流操作 alice先手 每次操作時從下面的規則...

bzoj3895 取石子(博弈論,記憶化搜尋)

time limit 1 sec memory limit 512 mb submit 361 solved 177 submit status discuss alice和bob兩個好朋含友又開始玩取石子了。遊戲開始時,有n堆石子 排成一排,然後他們輪流操作 alice先手 每次操作時從下面的規則...

BZOJ 3895 取石子 SG函式 搜尋

有n堆石子 從某堆石子中取走乙個 合併任意兩堆石子 不能操作的人輸。100 的資料滿足t 100,n 50.ai 1000 容易發現基礎運算元 d sum a i n 1 沒有個數為1的堆還好說,有的話 好麻煩啊啊啊啊啊怎麼可能找規律 然後看題解,woc記憶化搜尋 f i,j 表示i個個數為1的堆,...