当前位置: 首页 > news >正文

Code[VS] 1022 覆盖 题解

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 解决。

 

代码:

 1 #include "cstdio"
 2 #include "cstring"
 3 #include "algorithm"
 4 
 5 using namespace std ;
 6 const int maxN = 210 ;
 7 const int INF = 2147483647 ; 
 8 
 9 bool wat[ maxN ][ maxN ] , map[ maxN ][ maxN ] , used[ maxN ][ maxN ] ;
10 
11 int N , M , k , ans , px , py ;
12 
13 int from[ maxN ][ maxN ][ 2 ] ;
14 
15 int _1[ 5 ] = { 0 , 1 , -1 , 0 , 0 } , _2[ 5 ] = { 0 , 0 , 0 , 1 , -1 } ;//方向 
16 
17 bool find ( int x , int y ) 
18 {
19     int px , py ;
20     for(int i=1 ; i<=4 ; ++i )
21     {
22         px = x + _1[i] ,py = y + _2[i];
23         if( px<=0 || px>N || py<=0 || py>M || wat[ px ][ py ] ) continue ;
24         if ( !wat[ px ][ py ] && !used[ px ][ py ] && !map[ px ][ py ])
25         {
26             used[ px ][ py ] = true ;
27             if( ( !from[ px ][ py ][ 0 ] ) || (find( from[ px ][ py ][ 0 ] , from[ px ][ py ][ 1 ] ) ) ) 
28             {
29                 from[ px ][ py ][ 0 ] = x ;
30                 from[ px ][ py ][ 1 ] = y ;
31                 return true ;
32             } 
33         }
34     }
35     return false ;
36 }
37 int main()
38 {
39     scanf( "%d%d%d" , &N , &M , &k ) ;
40     for(int i=1 ; i<=k ; ++i )
41     {
42         int _x , _y ;
43         scanf( "%d%d" , &_x , &_y ) ;
44         wat[ _x ][ _y ] = true ;
45     }
46     for(int i=1 ; i<=N ; ++i )
47         for(int j=1 ; j<=M ; ++j )
48             if((i % 2 && j % 2) || (i%2==0 && j%2==0))map[ i][ j ] = 1 ;
49     for(int i=1 ; i<=N ; ++i )
50     {
51         for(int j=1 ; j<=M ; ++j )
52         {
53             if( !wat[ i ][ j ] && map[ i ][ j ] )
54             {
55                 memset ( used, 0 , sizeof ( used ) ) ;
56                 if ( find ( i , j ) ) ans++ ;
57             }
58         }
59     }
60     printf( "%d" , ans ) ;
61     return 0 ;
62 }

 

2016-09-16 15:46:24

 

(完)

转载于:https://www.cnblogs.com/shadowland/p/5876554.html

相关文章:

  • Q: ossfs挂载时如何设置权限?
  • 拷贝(复制)构造函数和赋值函数
  • MFC静态分割后锁定分隔条/限制分隔条的移动范围 方法1
  • 异常 ORA-00257: archiver error. Connect internal only, until freed
  • 判断32位整数二进制中1的个数的算法
  • json化 datatable
  • 乐视云视频 接口开发 结合百度编辑器
  • css 布局
  • code异常处理
  • 直线方程公式
  • python中的tab补全功能添加
  • 一个失败团队的养成
  • 利用CSS3 clip-path裁剪各种图形。
  • [BZOJ4016][FJOI2014]最短路径树问题
  • 计数问题
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • CSS魔法堂:Absolute Positioning就这个样
  • Druid 在有赞的实践
  • HTML-表单
  • JavaScript 一些 DOM 的知识点
  • Java的Interrupt与线程中断
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • RxJS: 简单入门
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • Vue实战(四)登录/注册页的实现
  • Xmanager 远程桌面 CentOS 7
  • yii2权限控制rbac之rule详细讲解
  • 成为一名优秀的Developer的书单
  • 给第三方使用接口的 URL 签名实现
  • 警报:线上事故之CountDownLatch的威力
  • 聚类分析——Kmeans
  • 力扣(LeetCode)22
  • 我这样减少了26.5M Java内存!
  • 正则表达式小结
  • 7行Python代码的人脸识别
  • 数据可视化之下发图实践
  • #1015 : KMP算法
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (floyd+补集) poj 3275
  • (k8s中)docker netty OOM问题记录
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (十八)SpringBoot之发送QQ邮件
  • (转)linux下的时间函数使用
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .NetCore 如何动态路由
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • @Autowired多个相同类型bean装配问题
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • [20150904]exp slow.txt
  • [202209]mysql8.0 双主集群搭建 亲测可用