题目意思就是一个M*N的有洞棋盘棋盘上,用1*2的板子去覆盖没有洞的地方,要求板子不能重叠,最终能否将棋盘完整覆盖。

代码:

 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 35 struct z
{
int color;
int ct;
};
struct z chess[MAX*MAX];
int lc,rc;
int m,n;a
__int64 hole[MAX*MAX];
__int64 G[MAX*MAX][MAX*MAX];
__int64 link[MAX*MAX];
__int64 vis[MAX*MAX];
int zero=,one=;/*分别记录0,1的个数*/ int find(int);
void bin_map(void); int main(void)
{
int k,i,j;
int x,y;
scanf("%d%d%d",&m,&n,&k);
for(i=; i<k; i++)
{
scanf("%d%d",&x,&y);
hole[n*(y-)+x]=;
}
if(n&)
for(j=,i=; i<=m*n; i++)
{
if(hole[i]==)
{
chess[i].color=j=!j;
if(j)
chess[i].ct=++one;
else
chess[i].ct=++zero;
}
else
{
chess[i].color=-;
j=!j;
}
}
else
for(j=,i=; i<=m*n; i++)
{
if(hole[i]==)
{
chess[i].color=!j;
if(!j)
chess[i].ct=++one;
else chess[i].ct=++zero;
}
else
chess[i].color=-;
if(i%n)
j=!j;
}
bin_map();
int ans=;
for(i=; i<=zero; i++)
{
memset(vis,,sizeof(vis));
if(find(i))
ans++;
}
if(*ans==m*n-k)
puts("YES");
else puts("NO");
return ;
} void bin_map(void)
{
int i;
for(i=; i<=m*n; i++)
{
if(chess[i].color==)
{
if(i%n!=&&chess[i-].color==)
G[chess[i].ct][chess[i-].ct]=;
if(i%n&&chess[i+].color==)
G[chess[i].ct][chess[i+].ct]=;
if(i>n&&chess[i-n].color==)
G[chess[i].ct][chess[i-n].ct]=;
if(i<=m*n-n&&chess[i+n].color==)
G[chess[i].ct][chess[i+n].ct]=;
}
}
}
int find(int x)
{
int i;
for(i=; i<=one; i++)
{
if(G[x][i]&&!vis[i])
{
vis[i]=;
if(link[i]==||find(link[i]))
{
link[i]=x;
return ;
}
}
}
return ;
}

我的思路大致是这样:

由于是将棋盘相邻两区域覆盖,所以可将棋盘黑白相间的涂色,然后再挖去相应的洞,这样,将白色的作为一个二分图节点子集,剩下的作为另一个子集,然后相邻的黑白块代表的顶点在二分图中连接起来,然后求出二分图的额最大匹配数,便是最多能够放置的板子。

POJ_2446_Chessboard的更多相关文章

随机推荐

  1. 【转】【2015MIIC】迅雷CTO陈磊:互联网思维会害死很多传统企业

    MIIC2015大会的“跨界与重构”论坛上,迅雷CTO.网心科技CEO陈磊的演讲引起众多共鸣——独家揭秘“互联网大忽悠”,给这群人画了像,互联网大忽悠通常有五招: 第1招,画大饼,给你一个宏伟的目标: ...

  2. css placeholder 颜色设置

    因为每个浏览器的CSS选择器都有所差异,所以需要针对每个浏览器做单独的设定(可以在冒号前面写input和textarea). ::-webkit-input-placeholder { /* WebK ...

  3. Linux操作系统搭建LAMP开发环境

    Step1. 安装 Apache 在terminal中输入命令 sudo apt-get install apache2 打开浏览器,在地址栏输入:127.0.0.1,如果出现了 “It works! ...

  4. java经验总结二:ORA-08103: 对象不再存在

    问题发生的环境: 在springMvc+mybatis框架中,调用oracle的存储过程时,碰到的一个这样的异常: org.springframework.jdbc.UncategorizedSQLE ...

  5. 关于cnpm的一点小bug

    在实际工作中,一个项目完成后,在上线前,常常需要把代码进行压缩,一般是用gulp或者 webpack 进行压缩.(小妹是用gulp) gulp是运行在node 环境下的. 所以首先,下载并安装了nod ...

  6. Myeclipse配置mybatis的xml自动提示

    关于mapper的xml的文件的自动提示 mapper头: <?xml version="1.0" encoding="UTF-8"?><!D ...

  7. HDU 1619 Unidirectional TSP(单向TSP + 路径打印)

    Unidirectional TSP Problem Description Problems that require minimum paths through some domain appea ...

  8. devenv compile errors collection

    任务:使用 devenv commnd line 编译 VS 2010 工程. 使用 devenv 编译工程,要保证工程所需的 VC++目录 (VC++ Directories) 设置正确才能编译成功 ...

  9. dp方程

    1.        资源问题1 -----机器分配问题 F[I,j]:=max(f[i-1,k]+w[i,j-k]) 2.        资源问题2 ------01背包问题   F[I,j]:=ma ...

  10. SSH中调用另一action的方法(chain,redirect)

      从一个Action直接跳到另一个Action中,Struts提供了两种结果类型可以实现:chain.redirect.        从Servlet中学到重定向是不能保留参数的,也就是说重定向了 ...