Code[VS] 1022 覆盖 题解

 Hungary Algorithm
题目传送门:Code[VS] 1022
题目描述 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

____________________________________分割线_____________________________________

分析:

将矩形的每一块分为 0 , 1 两个集合,相邻的两块属于不同的集合,如下图:

这时,这个问题就转化为一个典型的二分图匹配,可以使用Hungary Algorithm 解决。

代码:

 #include "cstdio"
#include "cstring"
#include "algorithm" using namespace std ;
const int maxN = ;
const int INF = ; bool wat[ maxN ][ maxN ] , map[ maxN ][ maxN ] , used[ maxN ][ maxN ] ; int N , M , k , ans , px , py ; int from[ maxN ][ maxN ][ ] ; int _1[ ] = { , , - , , } , _2[ ] = { , , , , - } ;//方向 bool find ( int x , int y )
{
int px , py ;
for(int i= ; i<= ; ++i )
{
px = x + _1[i] ,py = y + _2[i];
if( px<= || px>N || py<= || py>M || wat[ px ][ py ] ) continue ;
if ( !wat[ px ][ py ] && !used[ px ][ py ] && !map[ px ][ py ])
{
used[ px ][ py ] = true ;
if( ( !from[ px ][ py ][ ] ) || (find( from[ px ][ py ][ ] , from[ px ][ py ][ ] ) ) )
{
from[ px ][ py ][ ] = x ;
from[ px ][ py ][ ] = y ;
return true ;
}
}
}
return false ;
}
int main()
{
scanf( "%d%d%d" , &N , &M , &k ) ;
for(int i= ; i<=k ; ++i )
{
int _x , _y ;
scanf( "%d%d" , &_x , &_y ) ;
wat[ _x ][ _y ] = true ;
}
for(int i= ; i<=N ; ++i )
for(int j= ; j<=M ; ++j )
if((i % && j % ) || (i%== && j%==))map[ i][ j ] = ;
for(int i= ; i<=N ; ++i )
{
for(int j= ; j<=M ; ++j )
{
if( !wat[ i ][ j ] && map[ i ][ j ] )
{
memset ( used, , sizeof ( used ) ) ;
if ( find ( i , j ) ) ans++ ;
}
}
}
printf( "%d" , ans ) ;
return ;
}

2016-09-16 15:46:24

(完)

Code[VS] 1022 覆盖 题解的更多相关文章

  1. Code[VS] 2152 滑雪题解

    Code[VS] 2152 滑雪题解 题目描述 Description trs喜欢滑雪.他来到了一个滑雪场,这个滑雪场是一个矩形,为了简便,我们用r行c列的矩阵来表示每块地形.为了得到更快的速度,滑行 ...

  2. Code[VS]1690 开关灯 题解

    Code[VS]1690 开关灯 题解     时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description:     YYX家门前 ...

  3. Code[VS] 2370 LCA 题解

    Code[VS] 2370 小机房的树 题解 RMQ 树链剖分 题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同 ...

  4. Codevs 1022 覆盖

    时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 有一个N×M的单位方格中,其中有些方格是水塘,其他方格是陆地.如果要用1×2的矩 ...

  5. 【wikioi】1022 覆盖(匈牙利)

    http://www.wikioi.com/problem/1022/ 好不容易来一次1A,,水题啊.. 染色后裸匈牙利orz #include <cstdio> #include < ...

  6. bzoj 3225: [Sdoi2008] 立方体覆盖 题解

    [原题] 3225: [Sdoi2008]立方体覆盖 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 51  Solved: 36 [Submit][S ...

  7. C#版 - 剑指offer 面试题9:斐波那契数列及其变形(跳台阶、矩形覆盖) 题解

    面试题9:斐波那契数列及其变形(跳台阶.矩形覆盖) 提交网址: http://www.nowcoder.com/practice/c6c7742f5ba7442aada113136ddea0c3?tp ...

  8. Codeforces 965E Short Code 启发式合并 (看题解)

    Short Code 我的想法是建出字典树, 然后让后面节点最多的点优先向上移到不能移为止, 然后gg. 正确做法是对于当前的节点如果没有被占, 那么从它的子树中选出一个深度最大的点换到当前位置. 用 ...

  9. 【CODEVS】1022 覆盖

    [算法]二分图匹配(最大流) [题解]对i+j进行奇偶染色,就可以保证相邻两格异色. 然后就是二分图了,对相邻格子连边跑最大流即可. #include<cstdio> #include&l ...

随机推荐

  1. C#的索引器

    using System; using System.Collections; using System.Collections.Generic; using System.IO; namespace ...

  2. SQL中的JOIN类型解释(CROSS, INNER,OUTER),关键字ON,USING

    书上讲得明白,解了不少迷惑. SELECT e.fname, e.lname, d.name FROM employee AS e INNER JOIN department AS d ON e.de ...

  3. float 的有效数字为七位是怎么得出来的

    以下内容来自CSDN网友xian_wwq的回答(http://bbs.csdn.net/topics/390874239): float:   1bit(符号位) 8bits(指数位) 23bits( ...

  4. php几个常用的概率算法(抽奖、广告首选)

    做网站类的有时会弄个活动什么的,来让用户参加,既吸引用户注册,又提高网站的用户活跃度.同时参加的用户会获得一定的奖品,有100%中奖的,也有按一定概率中奖的,大的比如中个ipad.iphone5,小的 ...

  5. DTMF的原理分析

    转自:http://blog.csdn.net/wangwenwen/article/details/8264925 1. DTMF原理 DTMF(Double Tone MulitiFrequenc ...

  6. ASP.NET MVC 4 WebAPI Simple Sample

    // Controllers.cs namespace Microshaoft.WebApi.Controllers { using Microshaoft.WebApi.Models; using ...

  7. Android:dimen尺寸资源文件的使用(转)

    为了适配不同的分辨率. dimen.xml在values文件夹下面 <resources> <!-- Default screen margins, per the Android ...

  8. Asp.Net MVC中DropDownListFor的用法

    在Asp.Net MVC中可以用DropDownListFor的方式来让用户选择已定列表中的一个数值.用法不复杂,这里简单做一个记录. 首先我们要定义一个 Model ,用户在 DropDownLis ...

  9. ios录音

    #import "ViewController.h" #import <AVFoundation/AVFoundation.h> @interface ViewCont ...

  10. 【转】saiku与kylin整合备忘录

    http://blog.csdn.net/freefishly/article/details/51759133 为什么要整合? Kylin是通过离线预计算将Hive中事实表的各组合维度的值存储在Hb ...