HDU:4185-Oil Skimming

Oil Skimming

Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 32768/32768 K (Java/Others)

Problem Description

Thanks to a certain “green” resources company, there is a new profitable industry of oil skimming. There are large slicks of crude oil floating in the Gulf of Mexico just waiting to be scooped up by enterprising oil barons. One such oil baron has a special plane that can skim the surface of the water collecting oil on the water’s surface. However, each scoop covers a 10m by 20m rectangle (going either east/west or north/south). It also requires that the rectangle be completely covered in oil, otherwise the product is contaminated by pure ocean water and thus unprofitable! Given a map of an oil slick, the oil baron would like you to compute the maximum number of scoops that may be extracted. The map is an NxN grid where each cell represents a 10m square of water, and each cell is marked as either being covered in oil or pure water.

Input

The input starts with an integer K (1 <= K <= 100) indicating the number of cases. Each case starts with an integer N (1 <= N <= 600) indicating the size of the square grid. Each of the following N lines contains N characters that represent the cells of a row in the grid. A character of ‘#’ represents an oily cell, and a character of ‘.’ represents a pure water cell.

Output

For each case, one line should be produced, formatted exactly as follows: “Case X: M” where X is the case number (starting from 1) and M is the maximum number of scoops of oil that may be extracted.

Sample Input

1 6
……
.##…
.##…
….#.
….##
……

Sample Output

Case 1: 3


解题心得:

  1. 题意很简单,就是要你在图中去截取1x2的方块,问最多能截取多少个。
  2. 就是一个二分匹配问题,还是很简单的,有两种建图的方法
    • 第一种是给每一个坐标编号,查找每一个‘#’的四周图形,然后建一个双向的图,得到的答案除2就可以了。
    • 第二种就更高级了,仔细观察可以观看一个点的行列之和与他四周的四个格子的行列和奇偶性一定是不同的,这样就可以参考国际象棋的棋盘,黑色的方格匹配白色方格,二分匹配。

弱智建图写代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 610;
char maps[maxn][maxn];
bool vis[maxn*maxn];
vector <int> ve[maxn*maxn];
int n,dir[4][2] = {0,1,0,-1,-1,0,1,0},match[maxn*maxn];void init()
{scanf("%d",&n);for(int i=0;i<maxn;i++)ve[i].clear();memset(vis,0,sizeof(vis));memset(maps,0,sizeof(maps));memset(match,-1,sizeof(match));for(int i=1;i<=n;i++)scanf("%s",maps[i]+1);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(maps[i][j] == '#')for(int k=0;k<4;k++){int x = i + dir[k][0];int y = j + dir[k][1];if(maps[x][y] == '#')ve[i*n+j].push_back(x*n+y);//如果四周是‘#’就建立联系}}bool dfs(int x)//match
{for(int i=0;i<ve[x].size();i++){int v = ve[x][i];if(!vis[v]){vis[v] = true;if(match[v] == -1 || dfs(match[v])){match[v] = x;return true;}}}return false;
}int solve()
{int ans = 0;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(maps[i][j] == '#'){memset(vis,0,sizeof(vis));if(dfs(i*n+j))ans++;}return ans;
}int main()
{int t;scanf("%d",&t);int cas = 1;while(t--){init();int ans = solve();printf("Case %d: %d\n",cas++,ans/2);//因为建立的是双向图,所以一定要除2}return 0;
}

转载于:https://www.cnblogs.com/GoldenFingers/p/9107219.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/252500.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

域控制器情况分析

域控制器情况分析 1、Windows Server 的 Foundation、Standard、Enterprise 以及 Datacenter 版本号既可作为源server&#xff0c;也可作为目标server。仅支持将 Foundation Server 版本号作为受限方案中的目标server。在使用 Foundation Server 作为目标server之前&#xff0c…

Linux基础命令---su

su临时切换身份到另外一个用户&#xff0c;使用su切换用户之后&#xff0c;不会改变当前的工作目录&#xff0c;但是会改变一些环境变量。此命令的适用范围&#xff1a;RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法su [选项] [参数]2、选项列表--help显示…

在Ubuntu 16.04 上安装和卸载matlab 2018b(Install and uninstall matlab 2018b on ubuntu)

1.安装2018b可以参考下面两篇文章 https://www.ph0en1x.space/2018/04/23/ubuntu_matlab/ https://blog.csdn.net/qq_32892383/article/details/79670871 2.卸载2018b 我的默认安装在 /usr/local/MATLAB $ sudo rm -r /usr/local/MATLAB $ cd ~ $ ll (这个时候可以看到隐…

04.openssl编程——哈希表

4.1 哈希表在一般的数据结构如线性表和树中&#xff0c;记录在结构中的相对位置与记录的关键字之间不存在确定的关系&#xff0c;在结构中查找记录时需要进行一系列的关键字比较。这一类查找方法建立在比较的基础上&#xff0c;查找的效率与比较次数密切相关。理想的情况是能…

shell数组中“和@的妙用

#!/bin/bashlist(4k"8k a bit""16k abc""32k gold"64k)for i in "${list[]}"do echo $idone 分别对比一下不带” 和换成*&#xff0c;之间的区别。转载于:https://www.cnblogs.com/zjd2626/p/7041341.html

「JupyterLab」 Jupyter Notebook 新生代IDE模式页面

参考&#xff1a;Overview 安装&#xff1a; $ pip install jupyterlab 启动&#xff08;不是jupyter notebook&#xff09;&#xff1a; $ jupyter lab Jupyterlab中最好用的就是显示csv数据。CSV数据显示效果&#xff1a; 安装插件 jupyterlab是和jupyter notebook隔离的&…

undefined reference to 'pthread_create'

刚在Ubuntu16.04 上用Clion写一个"单生产者-单消费者"的线程的程序&#xff0c;源程序可以参考下面的网址 https://www.cnblogs.com/haippy/p/3252092.html 在编译的时候编译器给的提示是&#xff1a; undefined reference to pthread_create 解决办法就是在CMake…

windows下安装vundle

windows下安装vundle ## 前言 windows下安装vundle和linux下稍微有些不一样&#xff0c;虽然官网给出了 安装说明&#xff0c;但是有些问题的。E117: Unknown function: vundle#begin ## 安装步骤 参考官方文档即可vundle ## 问题处理 修改_vimrc配置文件内容&#xff0c;这是正…

深度学习框架不能“包治百病”,开发者如何选出最适合自己的?

随着深度学习关注度和势头上升&#xff0c;深度学习被越来越多的企业和组织的生产实践结合起来。这时&#xff0c;无论是对于深度学习相关专业的初学者&#xff0c;还是已经在企业和组织中从事工业场景应用和研发的开发者来说&#xff0c;选择一个适合自己&#xff0c;适合业务…

Linux+CLion+cmake 动态链接库的使用

在作《剑指offer》中的单向链表的题目时&#xff0c;需要一些常用到的操作链表的函数放在一个文件下&#xff0c;我想把这些函数的声明都写在list.h文件中&#xff0c;把这些函数的定义都写在list.cpp文件中&#xff0c;这样就可以在测试文件test.cpp中调用list.cpp中定义的函数…

PAT(乙级)1009

1009. 说反话 (20)给定一句英语&#xff0c;要求你编写程序&#xff0c;将句中所有单词的顺序颠倒输出。 输入格式&#xff1a;测试输入包含一个测试用例&#xff0c;在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成&#xff0c;其中单词是由英文字母&…

库存扣减问题

2019独角兽企业重金招聘Python工程师标准>>> 并发减库存 并发扣库存问题总结 库存扣减还有这么多方案&#xff1f; | 架构师之路 转载于:https://my.oschina.net/u/2939155/blog/3004363

HSRPSTPACL

1 HSRP配置 1.1 问题 在企业网络到外部的连接方案中&#xff0c;要求不高的条件下可以是单出口。一旦该出口线路出现问题&#xff0c;整个企业网络就不能连接到外网了。为了使得企业网络到外网连接的高可用性&#xff0c;可以设置两个以上的出口&#xff0c;然而多个出口对…

java 的 CopyOnWriteArrayList类

初识CopyOnWriteArrayList 第一次见到CopyOnWriteArrayList&#xff0c;是在研究JDBC的时候&#xff0c;每一个数据库的Driver都是维护在一个CopyOnWriteArrayList中的&#xff0c;为了证明这一点&#xff0c;贴两段代码&#xff0c;第一段在com.mysql.jdbc.Driver下&#xff0…

科技的趋势!AI将进军了37%的企业

2019独角兽企业重金招聘Python工程师标准>>> 市场研究机构Gartner调查了全球89个国家的逾3,000名信息长&#xff08;CIO&#xff09;&#xff0c;显示有37%的企业已经或打算于近期内部署人工智能&#xff08;AI&#xff09;&#xff0c;在4年内成长270%。Gartner研究…

CMakeLists.txt编写规则

在PROJECT_SOURCE_DIR下新建了src, include, lib, bin四个子文件夹。 src文件夹用来存放所有的.cpp文件&#xff0c;include文件夹用来存储所有的.h文件&#xff0c; lib中存放生成的自己编写的共享库&#xff0c; bin中存放所有的可执行文件 用SET来设置.exe可执行文件和共享…

nginx.conf配置详解

######Nginx配置文件nginx.conf中文详解######定义Nginx运行的用户和用户组 user www www;#nginx进程数&#xff0c;建议设置为等于CPU总核心数。 worker_processes 8;#全局错误日志定义类型&#xff0c;[ debug | info | notice | warn | error | crit ] error_log /usr/local…

更新 hadoop eclipse 插件

卸载hadoop 1.1.2插件。并安装新版hadoop 2.2.0插件。 假设直接删除eclipse plugin文件夹下的hadoop 1.1.2插件&#xff0c;会导致hadoop 1.1.2插件残留在eclipse中&#xff0c;在eclipse perspective视图中有Map/Reduce视图&#xff0c;可是没有图标&#xff0c;新建项目也不会…

【K8S学习笔记】Part1:使用端口转发访问集群内的应用

本文介绍如何使用kubectl port-forward命令连接K8S集群中运行的Redis服务。这种连接方式有助于数据库的调试工作。 注意&#xff1a;本文针对K8S的版本号为v1.9&#xff0c;其他版本可能会有少许不同。 0x00 准备工作 在进行该操作之前&#xff0c;需要满足以下条件&#xff1a…

Ubuntu 16.04 桌面菜单栏 任务栏 标题栏消失的解决办法

将home目录下的.cache删除掉就可以了 & cd & sudo rm -r ./.cache