poj 2311 Cutting Game (SG)

题意:

有一张W*H的纸片。

每人每次可以横着撕或者竖着撕,先撕出1*1那一方胜。

 

数据范围:

W and H (2 <= W, H <= 200)

 

思路:

很好抽象出游戏图的模型,用SG解决。直接看代码。

 

代码:

int dp[maxn][maxn];

int sg(int w,int h){
    if(dp[w][h]!=-1)
        return dp[w][h];
    bool g[maxn];  mem(g,false);
    for(int i=2;i<=w/2;++i)
        g[sg(i,h)^sg(w-i,h)] = true;
    for(int i=2;i<=h/2;++i)
        g[sg(w,i)^sg(w,h-i)] = true;
    for(int i=0;;++i){
        if(!g[i]) return dp[w][h]=i;
    }
}
int main(){
    mem(dp,-1);
    int w,h;
    while(scanf("%d%d",&w,&h)!=EOF){
        if(sg(w,h))
            puts("WIN");
        else
            puts("LOSE");
    }
}

 

posted @ 2014-10-03 16:05  fish7  阅读(152)  评论(0编辑  收藏  举报