1022 覆盖

 
 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 大师 Master
 查看运行结果
 
 
题目描述 Description

有一个N×M的单位方格中,其中有些方格是水塘,其他方格是陆地。如果要用1×2的矩阵区覆盖(覆盖过程不容许有任何部分重叠)这个陆地,那么最多可以覆盖多少陆地面积。

输入描述 Input Description

输入文件的第一行是两个整数NM  (1<=NM<=100),第二行为一个整数K( K<=50),接下来的K行,每行两个整数X,Y表示K个水塘的行列位置。(1<=X<=N1<=Y<=M)。

输出描述 Output Description

输出所覆盖的最大面积块(1×2面积算一块)。

样例输入 Sample Input

4 4

6

1 1

1 4

2 2

4 1

4 2

4 4

样例输出 Sample Output

4

解题思路   将该题目转化为二分图使用匈牙利算法解

n*m的格子可以按顺序分成0 1的图
如 
0101010101
1010101010
0101010101
1010101010
一个点的位置(x,y)可以和周围的点(x+1,y),(x,y-1),(x,y+1),(x-1,y)进行两两匹配
有水的地方直接跳过
得出最后最多有多少对匹配成功的点
即答案所求 多少可以覆盖多少板子

  1. #include<iostream>
  2.  
  3. #include<cstring>
  4.  
  5. using namespace std;
  6.  
  7. int n,m,k,a,b,ans;
  8.  
  9. bool water[][];
  10.  
  11. bool ok[][];
  12.  
  13. int linkx[][];
  14.  
  15. int linky[][];
  16.  
  17. int dx[]={,,,-};
  18.  
  19. int dy[]={,-,,};
  20.  
  21. bool dfs(int x,int y)
  22.  
  23. {
  24.  
  25. if(water[x][y])return false;
  26.  
  27. for(int i=;i<;i++)
  28.  
  29. {
  30.  
  31. int xx=x+dx[i];
  32.  
  33. int yy=y+dy[i];
  34.  
  35. if(xx>&&yy>&&yy<=m&&xx<=n&&water[xx][yy]==false&&ok[xx][yy]==false)
  36.  
  37. {
  38.  
  39. ok[xx][yy]=true;
  40.  
  41. if(linkx[xx][yy]==||dfs(linkx[xx][yy],linky[xx][yy]))
  42.  
  43. {
  44.  
  45. linkx[xx][yy]=x;
  46.  
  47. linky[xx][yy]=y;
  48.  
  49. return true;
  50.  
  51. }
  52.  
  53. }
  54.  
  55. }
  56.  
  57. return false;
  58.  
  59. }
  60.  
  61. int main()
  62.  
  63. {
  64.  
  65. cin>>n>>m>>k;
  66.  
  67. for(int i=;i<k;i++)
  68.  
  69. {
  70.  
  71. cin>>a>>b;
  72.  
  73. water[a][b]=true;
  74.  
  75. }
  76.  
  77. for(int i=;i<=n;i++)
  78.  
  79. for(int j=;j<=m;j++)
  80.  
  81. {
  82.  
  83. memset(ok,,sizeof(ok));
  84.  
  85. if(i%==j%)
  86.  
  87. if(dfs(i,j))
  88.  
  89. ans++;
  90.  
  91. }
  92.  
  93. cout<<ans<<endl;
  94.  
  95. return ;
  96.  
  97. }

匈牙利算法实战codevs1022覆盖的更多相关文章

  1. poj3041 Asteroids 匈牙利算法 最小点集覆盖问题=二分图最大匹配

    /** 题目:poj3041 Asteroids 链接:http://poj.org/problem?id=3041 题意:给定n*n的矩阵,'X'表示障碍物,'.'表示空格;你有一把枪,每一发子弹可 ...

  2. CODEVS1022 覆盖 (二分图染色+匈牙利算法)

    先对整幅图进行二分图染色,再跑一遍匈牙利算法. /* CODEVS1022 */ #include <cstdio> #include <cstring> #include & ...

  3. 网络流24题 第三题 - CodeVS1904 洛谷2764 最小路径覆盖问题 有向无环图最小路径覆盖 最大流 二分图匹配 匈牙利算法

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - CodeVS1904 题目传送门 - 洛谷2764 题意概括 给出一个有向无环图,现在请你求一些路径,这些路径 ...

  4. cogs 728. [网络流24题] 最小路径覆盖问题 匈牙利算法

    728. [网络流24题] 最小路径覆盖问题 ★★★☆   输入文件:path3.in   输出文件:path3.out   评测插件时间限制:1 s   内存限制:128 MB 算法实现题8-3 最 ...

  5. HDU1054 Strategic Game——匈牙利算法

    Strategic Game Bob enjoys playing computer games, especially strategic games, but sometimes he canno ...

  6. HDU 1150 Machine Schedule (最小覆盖,匈牙利算法)

    题意: 有两台不同机器A和B,他们分别拥有各种运行模式1~n和1~m.现有一些job,需要在某模式下才能完成,job1在A和B上需要的工作模式又可能会不一样.两台机器一开始处于0模式,可以切换模式,但 ...

  7. UVALive 6811 Irrigation Line(二分图最小点覆盖--匈牙利算法)

    题意:求最少的线可以覆盖一个由0.1两种数字组成的图中所有的1. eg: 只需要两条线即可. 分析: 1.先为上述例子的行列标号 2.若图中数字为1,则代表该数字所在的行与列有关联. 例如第r1行第c ...

  8. hdu-1150(二分图+匈牙利算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1150 思路:题目中给出两个机器A,B:给出k个任务,每个任务可以由A的x状态或者B的y状态来完成. 完 ...

  9. 「知识学习」二分图的最大匹配、完美匹配和匈牙利算法(HDU-2063)

    定义 如果一个图\((E,V)\)的顶点集\(E\)能够被能够被分成两个不相交的集合\(X,Y\),且每一条边都恰连接\(X,Y\)中的各一个顶点,那么这个图就是一个二分图. 容易得知,它就是不含有奇 ...

随机推荐

  1. 爬虫(四)—— 使用pyecharts展示数据

    pyecharts模块 pyecharts可以将数据形象的在页面中用图表显示 一.安装 pip install pyecharts 二.使用 import pyecharts # 创建一个页面 pag ...

  2. maven项目中 把依赖的jar包一起打包

    1.pom.xml 配置文件: 在pom.xml配置文件中添加 <build> <plugins> <plugin> <artifactId>maven ...

  3. Java技术专区-虚拟机系列-类加载机制(类的初始化)

      类加载的生命周期:  加载 -> 验证 -> 准备 -> 解析 -> 初始化 -> 使用 -> 卸载       加载 -> 验证 -> 准备 -& ...

  4. Java菜鸟笔记

    System.out.println( ); 会在输出完毕后自动换行 System.out.print( );   在输出完毕后不会自动换行 MyEclipse/Eclipse快捷键: 定位到某一行, ...

  5. 微信小程序的加载机制和运行机制

    一.运行机制 冷启动指的是重新启动,热启动指的是5分钟内从后台切换到前台,只有冷启动才能加载最新的包. 小程序什么时候会关闭? 5min后台运行,连续收到两次(2s)系统告警. 二.加载机制 三.小程 ...

  6. 【记录】eclipse / STS 设置注释模版格式/导入注释模版格式

    设置注释模板的入口:Window->Preference->Java->Code Style->Code Template 将如下保存在新创建的xml文件中,导入进去 < ...

  7. xargs使用之空格处理

    xargs指定分隔符为'\n' (默认用空格分隔) locate xxx | xargs -d '\n' ls -l xargs使用 -0 参数会以字符串的'\0'结尾为分隔符,可以在文本传给xarg ...

  8. winform程序登陆后关闭登录窗体

    用winform做程序的时候,我们一般都是在Program先启动登录窗体,然后登录成功后才创建主窗体,结果这就导致了登录窗体无法关闭 所以如果我们不在Program的程序入口先创建登录窗体的话就能完美 ...

  9. nodejs fs.readFile

    fs.readFile(path[, options], callback) path <string> | <Buffer> | <URL> | <inte ...

  10. webpack配置(使用react,es6的项目)

    const path = require('path');const webpack = require('webpack');const HtmlWebpackPlugin = require('h ...