BZOJ3140:[HNOI2013]消毒——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=3140
https://www.luogu.org/problemnew/show/P3231
最近在生物实验室工作的小T遇到了大麻烦。 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为a*b*c,a、b、c 均为正整数。为了实验的方便,它被划分为a*b*c个单位立方体区域,每个单位立方体尺寸为1*1*1。用(i,j,k)标识一个单位立方体,1 <=i<=a,1<=j<=b,1<=k<=c。这个实验皿已经很久没有人用了,现在,小T被导师要求将其中一些单位立方体区域进 行消毒操作(每个区域可以被重复消毒)。
而由于严格的实验要求,他被要求使用一种特定 的F试剂来进行消毒。 这种F试剂特别奇怪,每次对尺寸为x*y*z的长方体区域(它由x*y*z个单位立方体组 成)进行消毒时,只需要使用min{x,y,z}单位的F试剂。F试剂的价格不菲,这可难倒了小 T。
现在请你告诉他,最少要用多少单位的F试剂。(注:min{x,y,z}表示x、y、z中的最小 者。)
参考:洛谷两个题解。
论算法很简单,但是思路真不好想。
首先对于二维来讲,最优的策略就是每次消毒一行/列。
那么对于三维同样适用。
二维的解题思路可以参考:POJ3041:Asteroids
但是现在是三维的怎么办?拍成二维的即可。
我们发现一定有min(a,b,c)<=17,于是我们可以令a<=17,这样我们枚举一维a是否被去除,然后将剩下的拍扁成二维做即可。
(PS:bzoj卡常,这个代码也只是刚好卡过。)
#include<cmath>
#include<cstdio>
#include<cctype>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=;
struct node{
int to,nxt;
}e[N];
int cnt,t,a,b,c,ans,shu[N],head[N],vis[N];
int mp[][N],tot,res;
bool ok[N];
inline void add(int u,int v){
e[++cnt].to=v;e[cnt].nxt=head[u];head[u]=cnt;
}
bool dfs(int u,int id){
for(int i=head[u];i;i=e[i].nxt){
int v=e[i].to;
if(vis[v]!=id){
vis[v]=id;
if(!shu[v]||dfs(shu[v],id)){
shu[v]=u;
return ;
}
}
}
return ;
}
void solve(int x){
for(int i=;i<=b;i++)head[i]=;
for(int i=;i<=c;i++)vis[i]=shu[i]=;
cnt=res=;
for(int i=;i<a;i++){
if(x&(<<i)){
ok[i+]=;
res++;
if(res>=ans)return;
}
else ok[i+]=;
}
for(int i=;i<=tot;i++){
if(ok[mp[][i]])
add(mp[][i],mp[][i]);
}
for(int i=;i<=b;i++){
if(dfs(i,i))res++;
if(res>=ans)return;
}
ans=res;
}
int main(){
scanf("%d",&t);
while(t--){
tot=;ans=;
scanf("%d%d%d",&a,&b,&c);
for(int i=;i<=a;i++){
for(int j=;j<=b;j++){
for(int k=;k<=c;k++){
int x;scanf("%d",&x);
if(x){
mp[][++tot]=i;
mp[][tot]=j;
mp[][tot]=k;
}
}
}
}
int minn=min(a,min(b,c));
if(minn==b)swap(a,b),swap(mp[],mp[]);
else if(minn==c)swap(a,c),swap(mp[],mp[]);
for(int i=;i<(<<a);i++)
solve(i);
printf("%d\n",ans);
}
return ;
}
+++++++++++++++++++++++++++++++++++++++++++
+本文作者:luyouqi233。 +
+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+
+++++++++++++++++++++++++++++++++++++++++++
BZOJ3140:[HNOI2013]消毒——题解的更多相关文章
- [BZOJ3140][HNOI2013]消毒(二分图最小点覆盖)
		
3140: [Hnoi2013]消毒 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1621 Solved: 676[Submit][Status] ...
 - bzoj3140: [Hnoi2013]消毒
		
Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为a*b*c,a.b.c 均为正整数.为了实验的方便,它被划分为a*b*c ...
 - bzoj3140: [Hnoi2013]消毒(二分图)
		
题目描述 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为a*b*c,a.b.c 均为正整数.为了实验的方便,它被划分为a*b*c个单位立方体区 ...
 - bzoj千题计划295:bzoj3140: [Hnoi2013]消毒
		
http://www.lydsy.com/JudgeOnline/problem.php?id=3140 如果只有两维,那就是二分图最小点覆盖 现在是三维,但是a*b*c<=5000,说明最小的 ...
 - [BZOJ3140][HNOI2013]消毒:二分图匹配
		
分析 假如实验皿是二维的,那么这道题便是一个二分图最小点覆盖问题,可以转化为二分图最大匹配问题,使用匈牙利算法解决. 考虑如何扩展到三维,首先我们发现一次操作的代价为\(min(x,y,z)\).不难 ...
 - 【BZOJ3140】消毒(二分图匹配)
		
[BZOJ3140]消毒(二分图匹配) 题面 Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为abc,a.b.c 均为正 ...
 - bzoj 3140: [Hnoi2013]消毒
		
3140: [Hnoi2013]消毒 Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为a*b*c,a.b.c 均为正整数 ...
 - P3231 [HNOI2013]消毒
		
P3231 [HNOI2013]消毒 二维覆盖我们已经很熟悉了 扩展到三维,枚举其中较小的一维,这里定义为$a$ 以$a$为关键字状压,$1$表示该面全选 剩下的面和二维覆盖一样二分图匹配 如果还没接 ...
 - 【HNOI2013】题解 bzoj3139~bzoj3144
		
比赛 题目: http://www.lydsy.com/JudgeOnline/problem.php?id=3139 题解: 3$\le$N$\le$10,比较明显是一个搜索题,一开始我是直接搜了 ...
 
随机推荐
- 离线安装Sharepoint工具
			
1. 首先安装操作系统,Windows Server 2008 R2,可以是企业版,也可以是数据中心版.然后再安装上SP1. 2. 在"服务管理"里面,添加角色,安装IIS. ...
 - js函数相关高级用法
			
一.惰性载入函数(lazy function) 使用场景:当一个函数中的判断分支只用执行一次(第一次调用时执行),后续不会再变化,则可以使用惰性函数来提高性能. var addEvent = func ...
 - 快速写一个babel插件
			
es6/7/8的出现,给我们带来了很多方便,但是浏览器并不怎么支持,目前chrome应该是支持率最高的,所以为了兼容我们只能把代码转成es5,这应该算是我们最初使用babel的一个缘由,随着业务的开发 ...
 - 初学Direct X(4)
			
初学Direct X(4) 本文学着做出一个如下的小游戏 游戏方式是使用键盘控制红色的Bucket收集蓝色的炸弹 1.酝酿一下 现在我已经掌握: 将位图文件加载到内存 绘制位图到buckbuffer ...
 - Unity编辑器 - 输入控件聚焦问题
			
Unity编辑器整理 - 输入控件聚焦问题 EditorGUI的输入控件在聚焦后,如果在其他地方改变值,聚焦的框不会更新,而且无法取消聚焦,如下图: 在代码中取消控件的聚焦 取消聚焦的"时机 ...
 - flume-kafka-storm-hdfs-hadoop-hbase
			
# bigdata-demo 项目地址: https://github.com/windwant/bigdata-demo.git hadoop: hadoop hdfs操作 log输出到flume ...
 - MongoDB->NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"
			
关系型数据库遵循ACID规则 事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性: 1.A (Atomicity) 原子性 原子性很容易理解,也就是说事务里的所有操作要么 ...
 - Sharepoint 2013与Sharepoint 2016的功能对比
			
开发人员功能 SharePoint Foundation 2013 SharePoint Server 2013 Standard CAL SharePoint Server 2013 Enterpr ...
 - Ubuntu—终端命令调整窗口的大小
			
1,查看窗口大小 current 1280x768 是我当前电脑的窗口大小,下面提供的是可以修改的窗口大小. $ xrandr 2.修改窗口大小 示例: $ xrandr -s 1024x768
 - Java并发简介
			
年轻的时候学会了“使用”Servlet后,感觉自己什么都会做了,之后就不停的写所谓的业务逻辑,框架(这里说的不是structs,spring等,就是说servlet)给人们屏蔽了很多复杂性(更别说构建 ...