令 dp[id][remain]:轮到编号为id的人时还剩下remain颗石子的状态 ,那么dfs记忆化搜索就好了。
代码:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int S=1<<13;
int n,s;
int dp[22][S];
int m[22];
int dfs(int id,int remain){
if(dp[id][remain]!=-1) return dp[id][remain];
if(!remain) return dp[id][0]=1;
for(int i=1;i<=m[id]&&i<=remain;++i){
if(!dfs((id+1)%(2*n),remain-i))
return dp[id][remain]=1;
}
return dp[id][remain]=0;
}
int main(){
ios::sync_with_stdio(false);
while(cin>>n,n){
memset(dp,-1,sizeof dp);
cin>>s;
for(int i=0;i<2*n;++i){
cin>>m[i];
}
cout<<dfs(0,s)<<endl;
}
return 0;
}