POJ 2068 Nim <博弈dp>

来源:互联网 发布:怎么加入湖南网络作协 编辑:程序博客网 时间:2024/05/18 00:54

题目链接

dp[id][remain]:idremain,那么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;}
原创粉丝点击