题解:
博弈搜索,后继状态中有一个为$P-position$则当前为$N-position$,否则为$P-position$。
有益于陶冶情操。
代码:
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 25; const int M = 8200; int n,m,a[N],nxt[N],dp[N][M];//0 lose 1 win int dfs(int x,int y) { if(dp[x][y]!=-1)return dp[x][y]; if(!y)return dp[x][y]=1; for(int i=1;i<=a[x]&&y-i>=0;i++) if(!dfs(nxt[x],y-i))return dp[x][y]=1; return dp[x][y]=0; } int main() { while(scanf("%d",&n)) { if(!n)break; scanf("%d",&m); for(int i=1;i<=(n<<1);i++)scanf("%d",&a[i]); for(int i=1;i<(n<<1);i++)nxt[i]=i+1; nxt[n<<1] = 1; memset(dp,-1,sizeof(dp)); printf("%d ",dfs(1,m)); } return 0; }