3140:[HNOI2013]消毒 - BZOJ
题目描述 Description
最近在生物实验室工作的小 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 中的最小者。)
输入描述 Input Description
输入文件第一行是一个正整数D,表示数据组数。
接下来是D组数据,每组数据开头是三个数a,b,c表示实验皿的尺寸。接下来会出现a个b行c列的用空格隔开的01矩阵,0表示对应的单位立方体不要求消毒,1表示对应的单位立方体需要消毒;例如,如果第1个01矩阵的第2行第3列为1,则表示单位立方体(1,2,3)需要被消毒。
输入保证满足a*b*c≤5000,T≤3。
输出描述 Output Description
仅包含 D 行,每行一个整数,表示对应实验皿最少要用多少单位的 F 试剂。
样例输入 Sample Input
1
4 4 4
1 0 1 1
0 0 1 1
0 0 0 0
0 0 0 0
0 0 1 1
1 0 1 1
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
1 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
1 0 0 0
样例输出 Sample Output
3
数据范围及提示 Data Size & Hint
对于区域(1,1,3)-(2,2,4)和(1,1,1)-(4,4,1)消毒,分别花费2个单位和1个单位的F试剂。
终于过了,fillchar没有一点优势啊
还是用各种for来把赋初值快一些
二维的怎么做大家都知道,就是二分图匹配,但是这是三维
怎么办呢?
!!!!强行转化成二维,枚举第三维的情况,那这需要2^k所以我们找最小的k
因为a*b*c<=5000,所以min{a,b,c}最大是17左右
然后开始枚举,但是还是很吃力所以对于把一个数组重新赋值的事最好避免
var
f:array[..,..]of longint;
first,next,last,cover,bool:array[..]of longint;
flag,sum:array[..]of boolean;
a,b,c,tot,num,min,aug,ans,match,t,time,time2,maxa,maxb,maxc:longint; procedure swap(var x,y:longint);
var
t:longint;
begin
t:=x;
x:=y;
y:=t;
end; procedure init;
var
i,j,k,s,ai,bi,ci:longint;
begin
read(ai,bi,ci);
a:=;
b:=;
c:=;
num:=;
maxa:=;
maxb:=;
maxc:=;
for i:= to ai do
for j:= to bi do
for k:= to ci do
begin
read(s);
if s= then
begin
inc(num);
f[num,]:=i;
f[num,]:=j;
f[num,]:=k;
if i>maxa then maxa:=i;
if j>maxb then maxb:=j;
if k>maxc then maxc:=k;
end;
end;
min:=ai;
if bi<min then min:=bi;
if ci<min then min:=ci;
if (bi<=ai)and(bi<=ci) then
begin
swap(a,b);
swap(maxa,maxb);
end
else
if (ci<=ai)and(ci<=bi) then
begin
swap(a,c);
swap(maxa,maxc);
end;
fillchar(sum,sizeof(sum),false);
for i:= to num do
sum[f[i,a]]:=true;
end; function path(x:integer):boolean;
var
i:integer;
begin
i:=first[x];
while i<> do
begin
if bool[last[i]]<>time2 then
begin
bool[last[i]]:=time2;
if (cover[last[i]]=)or(path(cover[last[i]])) then
begin
cover[last[i]]:=x;
exit(true);
end;
end;
i:=next[i];
end;
exit(false);
end; procedure insert(x,y:integer);
begin
inc(tot);
last[tot]:=y;
next[tot]:=first[x];
first[x]:=tot;
end; procedure work;
var
i:integer;
begin
if aug>ans then exit;
tot:=;
match:=;
for i:= to maxb do
first[i]:=;
for i:= to maxc do
cover[i]:=;
for i:= to num do
if flag[f[i,a]] then insert(f[i,b],f[i,c]);
for i:= to maxb do
begin
inc(time2);
if path(i) then inc(match);
end;
if ans>aug+match then ans:=aug+match;
end; procedure try(x:integer);
begin
if x>min then work
else
begin
flag[x]:=true;
try(x+);
if sum[x] then
begin
flag[x]:=false;
inc(aug);
try(x+);
dec(aug);
end;
end;
end; begin
read(t);
for time:= to t do
begin
init;
ans:=;
try();
writeln(ans);
end;
end.
3140:[HNOI2013]消毒 - BZOJ的更多相关文章
- bzoj 3140: [Hnoi2013]消毒
3140: [Hnoi2013]消毒 Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为a*b*c,a.b.c 均为正整数 ...
- 【刷题】BZOJ 3140 [Hnoi2013]消毒
Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为abc,a.b.c 均为正整数.为了实验的方便,它被划分为abc个单位立 ...
- 【BZOJ】3140: [Hnoi2013]消毒
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3140 猜一发(显然)有结论:每次一定选择一个平面,即每次操作对答案的贡献都为$1$ 首先可 ...
- BZOJ.3140.[HNOI2013]消毒(二分图匹配 匈牙利)
题目链接 不难想到每次一定是切一片. 如果是平面,很容易想到直接做二分图匹配.对于3维的? 可以发现min(a,b,c)的最大值只有\(\sqrt[3]{n}≈17\),我们暴力枚举这一最小值代表的是 ...
- [BZOJ3140][HNOI2013]消毒(二分图最小点覆盖)
3140: [Hnoi2013]消毒 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1621 Solved: 676[Submit][Status] ...
- P3231 [HNOI2013]消毒
P3231 [HNOI2013]消毒 二维覆盖我们已经很熟悉了 扩展到三维,枚举其中较小的一维,这里定义为$a$ 以$a$为关键字状压,$1$表示该面全选 剩下的面和二维覆盖一样二分图匹配 如果还没接 ...
- bzoj千题计划295:bzoj3140: [Hnoi2013]消毒
http://www.lydsy.com/JudgeOnline/problem.php?id=3140 如果只有两维,那就是二分图最小点覆盖 现在是三维,但是a*b*c<=5000,说明最小的 ...
- BZOJ3140:[HNOI2013]消毒——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=3140 https://www.luogu.org/problemnew/show/P3231 最近在 ...
- bzoj3140: [Hnoi2013]消毒
Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为a*b*c,a.b.c 均为正整数.为了实验的方便,它被划分为a*b*c ...
随机推荐
- CentOS6.3系统安装SCP命令
原文:http://www.111cn.net/sys/CentOS/58387.htm CP使用SSH协议在Linux系统中进行文件传输,但我最小安装的CentOS 6.3没有该命令. 代码如下 ...
- Ibatis.net防Sql注入
sql注入是一个古老的话题了,但经常会被我们忽略.尤其是使用了ibatis.net之后. Ibatis.net框架对sql注入问题已经做了很好的防护,但经常由于开发人员使用不当,会造成sql的注入隐患 ...
- Linux学习三部曲(之三)
今天用linux的时候,想到在windows客户端上传文件到linux服务端. 下面介绍一种方法. 可以通过SecureCRT上传.下载文件(使用sz与rz命令). 1. 安装 lrzsz 在Secu ...
- CAF(C++ actor framework)(序列化之类,无需序列化,直接传)(二)
昨天讲了Struct,还是不够满意,毕竟C++里面类用的比较多嘛,那就先上个类, 这段代码是我稍微改编了一下的结果.都是最基本的用法. #include <utility> #includ ...
- 【转载】分享下多年积累的对JAVA程序员成长之路的总结
注:该文是从百度贴吧转载过来,之前看到觉得写得还不错,对Java开发学习者来说很有意义的,可以看看. 我也搞了几年JAVA了,由于一向懒惰,没有成为大牛,只是一普通程序猿,不爱玩社交网站,不爱玩微博, ...
- Excel加载期间出现问题 解决方案
今天在处理Excle表格的时候出现了如图所示的问题,资料比较重要,需要进行恢复: 出现问题的原因就是在制作的时候,产生了某些临时的htm文件,但是只保留了excel,将那些临时文 ...
- DTcms手机版使用余额支付 提示信息跳转到PC版的错误。以及提交订单不打开新页面
手机版使用余额支付 提示信息跳转到PC版的错误 引起错误的原因是中间需要提交到DTcms.Web\api\payment\balance\index.aspx去处理 导致BasePage.cs中的li ...
- 关于浏览器兼容处理—— 识别IE浏览器
var b_name = navigator.appName;var b_version = navigator.appVersion;var version = b_version.split(&q ...
- Sublime字体设置
{"font_face": "Courier New","font_options":["subpixel_antialias&q ...
- 让Ecshop网店系统用户自动登陆
让Ecshop网店系统用户户自动登陆,打开ecshop includes/init.php文件,可以发现Ecshop系统判断用户的SESSION不存在的时候会去读取存储在COOKIES里面的值.如下代 ...