POJ 3537 Crosses and Crosses

news/2024/7/3 20:16:52

POJ_3537

    对于连成3个X的状态我们是不好表示的,因此我们不妨退一步,看看在连成3个X之前都是什么样的状态,只要避免这样的状态出现就行了。

    画一下就会发现,实际上只有X_X和_XX_这样两种类型,其实想到这里就逐渐有眉目了,两个选手一定会避免走出上面的局面。因此当一个选手画了一个X之后,假设局面是12X34,其中数字代表空位,为了避免上面的情况出现,1、2、3、4这4个位置一定不能走,如果走了的话就必输了,因此我们就可以等效成画一个X之后X连同左右两边各两个格子都被拿掉了,这样就变成take and break类型的游戏了,具体的这类游戏的一些模型可以参考《Game Theory》这篇论文。

    于是,我们只要把连续的一段格子看成一个状态就可以了,每次画X的时候要么就是在某一端去掉一些格子,要么就是在中间去掉5个格子并把剩下的格子分成左右两部分,再要么如果n小的话就全被去掉了。然后用记忆化搜索求得各个状态的sg函数值即可。

#include<stdio.h>
#include<string.h>
#define MAXD 2010
int sg[MAXD], N;
int dfs(int n)
{
if(sg[n] != -1)
return sg[n];
if(n <= 3)
return sg[n] = 1;
int i, j, k, h[MAXD];
memset(h, 0, sizeof(h));
for(i = 1; i <= n; i ++)
{
if(i > 3)
{
if(i < n - 2)
h[dfs(n - i - 2) ^ dfs(i - 3)] = 1;
else
h[dfs(i - 3)] = 1;
}
else
{
if(i < n - 2)
h[dfs(n - i - 2)] = 1;
else
h[0] = 1;
}
}
for(i = 0; h[i]; i ++);
return sg[n] = i;
}
int main()
{
memset(sg, -1, sizeof(sg));
while(scanf("%d", &N) == 1)
printf("%d\n", dfs(N) ? 1 : 2);
return 0;
}



http://www.niftyadmin.cn/n/4036211.html

相关文章

PHPmyadmin提示 缺少 mysqli 扩展。请检查 PHP 配置

(1). 你把php文件夹中ext文件夹中的php_mysqli.dll放到&#xff0c;widows 文件夹中的System32中&#xff0c;并把php.ini中extensionphp_mysqli.dll前的;分号去掉&#xff1b; (2). 重启apache (3).重启服务, apache面板中有Open Sevice, 先停止MySQL服务&#xff0c;再启动…

(转)moduleVScomponent

今天要记录一下技术上的事情&#xff0c;根据我这两个月来的学习把module、component这两个用来解耦的东西做下较为详细的说明&#xff0c;以及这两个与主程序的关系还有我所了解的通信方式做一下总结。 首先&#xff0c;module和components都可以把一个比较大的程序分成几个“…

关于2016的规划

这两天发生了许多事情&#xff0c;让我想了很多。 我决定好好经营这个博客&#xff0c;写下我的各类总结&#xff0c;权当是自己的日记——学习总结日记。 希望所有看到这个博客的人留下足迹&#xff0c;给予我一丝鼓励吧。 接下来的一年里&#xff0c;主要是几个方面&#xff…

如何在Mac OSX 中制作dylib和使用dylib

如何在Mac OSX 中制作dylib和使用dylib 本文本着简单易读的方式给朋友们,本人为原创 1.首先是构建一个函数库 编辑add.c int add(int a,int b) { return ab; } int axb(int a,int b) { return a*b; } 保存 其中两个函数  add axb 这是简单的写的,复杂的自己开发,这里主要介绍…

Adobe Flex迷你教程 -- 合理使用Module分割项目以及对Module的使用

现在说说Module&#xff0c;这篇教程代码不是最重要的&#xff0c;怎么样合理的使用Module以及注意的问题才是关键&#xff0c;所以建议大家注意下面红色语句。Module&#xff0c;可以将我们的项目按需划分为N个模块&#xff0c;在编译时将项目编译为主文件以及N个module的swf。…