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)进行两两匹配
有水的地方直接跳过
得出最后最多有多少对匹配成功的点
即答案所求 多少可以覆盖多少板子

#include<iostream>

#include<cstring>

using namespace std;

int n,m,k,a,b,ans;

bool water[][];

bool ok[][];

int linkx[][];

int linky[][];

int dx[]={,,,-};

int dy[]={,-,,};

bool dfs(int x,int y)

{

    if(water[x][y])return false;

    for(int i=;i<;i++)

    {

        int xx=x+dx[i];

        int yy=y+dy[i];

        if(xx>&&yy>&&yy<=m&&xx<=n&&water[xx][yy]==false&&ok[xx][yy]==false)

        {

            ok[xx][yy]=true;

            if(linkx[xx][yy]==||dfs(linkx[xx][yy],linky[xx][yy]))

            {

                linkx[xx][yy]=x;

                linky[xx][yy]=y;

                return true;

            }

        }

    }

    return false;

}

int main()

{

    cin>>n>>m>>k;

    for(int i=;i<k;i++)

    {

        cin>>a>>b;

        water[a][b]=true;

    }

    for(int i=;i<=n;i++)

        for(int j=;j<=m;j++)

       {

        memset(ok,,sizeof(ok));

        if(i%==j%)

         if(dfs(i,j))

            ans++;

       }

       cout<<ans<<endl;

    return ;

}

匈牙利算法实战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. 力扣算法题—143ReorderList

    Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You may not mod ...

  2. linux 下安装与使用

    一 安装 ## 先用wget下载源文件 wget http://download.redis.io/releases/redis-3.2.9.tar.gz ## 我自己建个文件夹 mkdir /usr ...

  3. 05、python的基础-->字典的增、删、改、查

    1.字典的增 dict = {'age':19,'name':'老王','hobby':'girl'} dict['sex'] = 'boy' #没有键值对,直接添加 dict[' #有键值对,覆盖值 ...

  4. vue input聚焦时,滚动至可视区域

    这里的代码来自vux,觉得vux处理得很好,在此记录一下.当我们在手机上填表单的时候,我们会希望正在填的input或者textarea会自动滚动至可视区域,方便我们边填写边查看内容.以前我的做法是,获 ...

  5. 转 Jmeter参数化--Post请求的Post body 参数化

    2018年01月22日 15:40:58 java2013liu 阅读数:2361收起 个人分类: Jemter   一.使用body data设置参数: 1,首先,使用Fiddler录制post请求 ...

  6. UML指南系列——用例图

    可以用用例来描述正在开发的系统想要实现的行为,而不必说明这些行为如何实现. 结构良好的用例只表示系统或者子系统的基本行为,而且既不过于笼统也不过于详细.

  7. Spring Cloud Eureka自我保护机制

    自我保护背景 首先对Eureka注册中心需要了解的是Eureka各个节点都是平等的,没有ZK中角色的概念, 即使N-1个节点挂掉也不会影响其他节点的正常运行. 默认情况下,如果Eureka Serve ...

  8. Spring入门之生命周期

    好几日没有读东西了,今天本来要读mybatis原理部分,但是看到作者讲,只是学会用不用学那么深,遂直接开干spring,工作中一直用springboot,框架都是领导搭好的,每天的任务就是增删改查,挺 ...

  9. 解决 使用migrations 执行update-database 出现System.InvalidOperationException: 实例失败的问题

    好久没有使用Code First的方式来创建模型了  今天重温了一下 但是出现了很多问题 现在总结一下 在我做完初期的操作的之后,使用 update-database -verbose 更新数据库时, ...

  10. netstat 指令

    netstat 指令将所有的网络端口监听情况进行罗列 语法  netstat -tuln 几个常见的服务端口 例  通过grep 查看端口来获得上面的服务是否开启,并给予提示 1 #!/bin/bas ...