傳送門
我們可以通過石子的堆數和每一堆的個數計算出剩餘的運算元,顯然運算元為奇先手必勝,為偶先手必敗。
若將=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的堆,...