题目传送门

我们选择33的网格进行讨论

有没有发现,因为每个点只能掩盖一次,所以题目要求的就是一个二分图最大匹配对数,因为要选择1
2的多米诺骨牌进行掩盖,不就是选择两个格子吗?这样的话,题目不就是要选择最多的这样的两个格子进行掩盖吗?这样的?什么样子的两个格子呢?当然是上下左右相临的啊,所以建图就不难了吧。

代码:

#include<cstdio>
#include<cstring>
using namespace std;
int n,m;
int x[4]={0,0,1,-1};
int y[4]={-1,1,0,0};
bool map[101][101];
int link[10010];
bool used[10010];
int head[10010],cnt;
struct TT
{int v,next;
}edge[50000];
void addedge(int u,int v)
{edge[cnt].v=v;edge[cnt].next=head[u];head[u]=cnt++;
}
bool can(int t)
{for(int p=head[t];p!=-1;p=edge[p].next){int v=edge[p].v;if(used[v]==false){used[v]=1;if(link[v]==-1||can(link[v])){link[v]=t;return true;}}}return false;
}
int MaxMatch()
{int num=0;memset(link,-1,sizeof(link));for(int i=1;i<=n*n;i++){memset(used,false,sizeof(used));if(can(i)) num++;}return num;
}
int main()
{cnt=0;memset(head,-1,sizeof(head));memset(map,false,sizeof(map));scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);map[x][y]=true;}for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(!map[i][j]){int num=(i-1)*n+j;for(int k=0;k<4;k++){int xx=i+x[k];int yy=j+y[k];if(xx>=1&&xx<=n&&yy>=1&&yy<=n&&!map[xx][yy]){int numb=(xx-1)*n+yy;addedge(num,numb);}}}printf("%d\n",MaxMatch()/2);return 0;
}

TYVJ-P1035 棋盘覆盖相关推荐

  1. TYVJ p1035 棋盘覆盖

      描述 Description     给出一张n*n(n<=100)的国际象棋棋盘,其中被删除了一些点,问可以使用多少1*2的多米诺骨牌进行掩盖.               输入格式 In ...

  2. 递归与分治之棋盘覆盖问题

    在一个2^k * 2^k个方格组成的棋盘中,若有一个方格与其他方格不同,则称该方格为一特殊方格,且称该棋盘为一个特殊棋盘. 显然特殊方格在棋盘上出现的位置有4^k种情形.因而对任何k≥0,有4^k种不 ...

  3. 计算机基础算法棋盘覆盖,分治算法求解棋盘覆盖问题互动教学过程.doc

    分治算法求解棋盘覆盖问题互动教学过程 分治算法求解棋盘覆盖问题互动教学过程 摘要:针对算法设计与分析课程难度较大.对学生编程能力要求较高的现状,通过对棋盘覆盖问题的分治算法求解过程进行互动教学设计,引 ...

  4. NYOJ 45 棋盘覆盖

    以为是分治法那个经典的例子,一看题才知道是大数 棋盘覆盖 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 在一个2k×2k(1<=k<=100)的棋盘中恰有一 ...

  5. 棋盘覆盖问题原理及演示程序

    说明:文章内容源自电子工业出版社<计算机算法设计与分析>一书. 演示程序由本人完成,新手请多指教! 在一个2^k * 2^k个方格组成的棋盘中,若恰有一个方格与其它方格不同,则称该方格为一 ...

  6. [算法][递归] 棋盘覆盖

    >_<: 问题描述: 在一个2k×2k 个方格组成的棋盘中,恰有一个方格与其它方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘.在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖 ...

  7. JAVA大数_棋盘覆盖

    第一道: 传送门:NYOJ 45 棋盘覆盖 2^k*2^k=4^k,其实就是大数计算,-1后取3的倍数.问题本源出自<计算机算法设计与分析>的棋盘覆盖问题,原始解法是分治法,递推出公式f( ...

  8. java棋盘问题_0x03大数问题(JAVA解决棋盘覆盖,A+B Problem II)

    常见的有棋盘覆盖和A+B问题,这类问题牵扯到的数值都比较大,如果用一般的数值类型,肯定输出不了,所以就要想一个办法,怎么把大数转换一下输出. A+B Problem II 时间限制:3000 ms | ...

  9. 算法设计棋盘覆盖问题c语言,棋盘覆盖问题(用分治法求解)

    // 棋盘覆盖 #include #include int Board[8][8]={0};//定义棋盘并初始化棋盘 void ChessBoard(int tr,int tc,int dr,int ...

  10. NYOJ-45 棋盘覆盖

    棋盘覆盖 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 在一个2k×2k(1<=k<=100)的棋盘中恰有一方格被覆盖,如图1(k=2时),现用一缺角的2× ...

最新文章

  1. Senparc.Weixin.MP SDK 微信公众平台开发教程(十八):Web代理功能
  2. STM32 基础系列教程 20 - RTC
  3. MacBook设置终端命令行的颜色高亮显示
  4. chrome插件-显示在地址栏的二维码
  5. MODBUS ASCII协议和RTU协议的比较 -----和利时PLC采用Modbus RTU
  6. 通过sql server的作业调度+存储过程来实现系统定时任务的方法
  7. PHP添加扩展 [Windows XAMPP]
  8. oracle必须配置哪个参数,oracle – 此操作必须将ORA-02069 global_names参数设置为TRUE...
  9. 大漠插件最新版本7.2031
  10. [NOIP2016]回文日期
  11. 基于智能家居万能无线遥控系统设计
  12. inSSIDer使用方法
  13. linux 如何清理垃圾文件,清理Linux系统垃圾文件操作方法图文步骤详解
  14. android 7 uc flash player,大神教你解决win7系统uc浏览器提示flash player遭到阻止的详细办法...
  15. L1-034. 点赞 团体程序设计天梯赛GPLT
  16. 转 大数据量下载解决方案
  17. 《ASP.NET AJAX 应用剖析立即上手》推荐序!
  18. Android中的三级缓存解析与实战
  19. dnf剑魂buff等级上限_DNF5.8新版buff换装提升整理以及装备选择,防止弯路
  20. 记一次addClass is not a function情况

热门文章

  1. Day124.分布式事务:Seata、2PC两段式、代码补偿TCC、本地消息表、MQ事物消息
  2. spring mvc 双亲上下文问题
  3. thinkphp6 websocket-room的加入房间+离开房间+房间消息发送
  4. 竖版视频怎么批量转换成横版视频
  5. Nesssus Pro 8.13.1下载安装
  6. 使用Nexus添加jar包到私服里
  7. ubuntu安装eclips
  8. geany怎么编写python_Geany怎么使用,Geany安装使用教程
  9. java方法的通用格式,【学习笔记】使用Java读取、写入Excel全版本(包含xls、xslx格式)通用方法及代码展示(POI)...
  10. android水电工具softonic,Softonic