[POJ3537]Crosses and Crosses
阿新 • • 發佈:2018-07-22
題目 n) color ring light return 最優 遊戲 main
題目大意:
有n個點排成一排,兩人,每人每次選一個點,則該點和該點左邊兩個、右邊兩個都不能被選了。雙方都選擇最優策略,問先手贏還是後手贏。
解題思路:
每次相當於把遊戲分成左右兩個子遊戲,分別計算sg值即可。
C++ Code:
#include<cstdio> #include<cstring> int sg[5005],n; int dfs(int n){ if(n<=0)return 0; if(sg[n]!=-1)return sg[n]; bool vis[n+2]; memset(vis,0,sizeof vis); for(int i=1;i<=n;++i) vis[dfs(i-3)^dfs(n-i-2)]=1; for(int i=0;;++i) if(!vis[i])return sg[n]=i; } int main(){ memset(sg,-1,sizeof sg); while(~scanf("%d",&n)) puts(dfs(n)?"1":"2"); return 0; }
[POJ3537]Crosses and Crosses