zoukankan      html  css  js  c++  java
  • [poj2311]Cutting Game_博弈论

    Cutting Game poj-2311

    题目大意题目链接

    注释:略。


    想法

    我们发现一次操作就是将这个ICG对应游戏图上的一枚棋子变成两枚。

    又因为SG定理的存在,记忆化搜索即可。

    最后,附上丑陋的代码... ...

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #define N 250  
    using namespace std;
    bool vis[N]; int sg[N][N];
    int n,m;
    int dp(int x,int y)
    {
    	if(sg[x][y]!=-1) return sg[x][y];
    	memset(vis,false,sizeof vis);
    	for(int i=2;i<=x-i;++i) vis[dp(i,y)^dp(x-i,y)]=1;
    	for(int i=2;i<=y-i;++i) vis[dp(x,i)^dp(x,y-i)]=1;
    	for(int i=0;;i++) if(!vis[i]) {sg[x][y]=i; return i;}
    }
    int main()
    {
    	memset(sg,-1,sizeof sg);
    	sg[2][2]=sg[2][3]=sg[3][2]=0;
    	while(scanf("%d%d",&n,&m)==2)
    	{
    		if(dp(n,m)) puts("WIN");
    		else puts("LOSE");
    	}
    	return 0;
    }
    /*7
    2 2
    3 2
    4 2
    */
    

    小结:SG定理应用极为广泛。

  • 相关阅读:
    模块的搜索路径
    循环导入问题
    模块的四种形式
    匿名函数
    面向过程编程
    内置函数
    名称空间和作用域
    函数嵌套
    函数对象
    可变长参数
  • 原文地址:https://www.cnblogs.com/ShuraK/p/9614586.html
Copyright © 2011-2022 走看看