bzoj2165
类似于bzoj1706,考虑到楼层是等价的
我们令f[p,i,j]为用了2^p次电梯,从房间i到j最多上升了多少层
然后从2^p很容易推到2^(p+1),类似于floyd的转移即可
下面我们要用最小的电梯次数
可以考虑每一个数都有其唯一的而二进制拆分
从p到0贪心得到一个最接近上了m层的次数ans,ans+1即为答案
const inf=-;
var f:array[..,..,..] of int64;
w,v:array[..] of int64;
e,t,i,j,k,n,p,h:longint;
fl:boolean;
ans,m:int64; function max(a,b:int64):int64;
begin
if a>b then exit(a) else exit(b);
end; function check(p:longint):boolean;
var i:longint;
begin
for i:= to n do
if f[p,,i]>=m then exit(true);
exit(false);
end; begin
readln(t);
for e:= to t do
begin
readln(n,m);
for i:= to n do
begin
for j:= to n do
begin
read(f[,i,j]);
if f[,i,j]= then f[,i,j]:=inf;
end;
readln;
end;
p:=;
while true do
begin
for i:= to n do
for j:= to n do
begin
f[p+,i,j]:=inf;
for k:= to n do
begin
f[p+,i,j]:=max(f[p+,i,j],f[p,i,k]+f[p,k,j]);
if f[p+,i,j]>m then
begin
f[p+,i,j]:=m;
break;
end;
end;
end;
if not check(p+) then inc(p) //出现了从房间1到某房间最大上升层数大于m就不用往下穷举了
else break;
end;
w[]:=;
for i:= to n do
w[i]:=inf; //w表示在当前所用次数下到i号房间最大上升层数层数
ans:=;
for h:=p downto do
begin
fl:=true;
for i:= to n do
begin
for j:= to n do
if w[i]+f[h,i,j]>=m then
begin
fl:=false;
break;
end;
if not fl then break;
end;
if fl then
begin
ans:=ans+int64() shl h;
for i:= to n do
v[i]:=inf;
for i:= to n do
for j:= to n do
v[j]:=max(v[j],w[i]+f[h,i,j]);
w:=v;
end;
end;
writeln(ans+);
end;
end.
bzoj2165的更多相关文章
- 2018.11.09 bzoj2165: 大楼(倍增+floyd)
传送门 先倍增出iii使得2i2^i2i时间时刚好有每个点能够到mmm层及以上. 然后就可以用floyd+floyd+floyd+倍增求出刚好不超过mmm层的时间,最后再补一层就行了. 代码: #pr ...
- bzoj2165: 大楼 (矩阵快速幂)
//========================== 蒟蒻Macaulish:http://www.cnblogs.com/Macaulish/ 转载要声明! //=============== ...
- bzoj2165: 大楼(倍增floyd)
题目大意:一个有向图,n(<=100)个点求一条长度>=m(<=10^18)的路径最少经过几条边. 一开始以为是矩乘,蓝鹅当时还没开始写,所以好像给CYC安利错了嘿嘿嘿QWQ 第一眼 ...
- Bzoj2165 大楼
Time Limit: 40 Sec Memory Limit: 259 MBSubmit: 779 Solved: 285[Submit][Status][Discuss] Descriptio ...
- [转载]hzwer的bzoj题单
counter: 664BZOJ1601 BZOJ1003 BZOJ1002 BZOJ1192 BZOJ1303 BZOJ1270 BZOJ3039 BZOJ1191 BZOJ1059 BZOJ120 ...
- BZOJ刷题列表【转载于hzwer】
沿着黄学长的步伐~~ 红色为已刷,黑色为未刷,看我多久能搞完吧... Update on 7.26 :之前咕了好久...(足见博主的flag是多么emmm......)这几天开始会抽时间刷的,每天几道 ...
随机推荐
- Spring整合CXF步骤,Spring实现webService,spring整合WebService
Spring整合CXF步骤 Spring实现webService, spring整合WebService >>>>>>>>>>>> ...
- VS2008 未找到编译器可执行文件 csc.exe【当网上其他方法试玩了之后不起作用的时候再用这个方法】
被公司派遣到中国海洋石油惠州炼化公司做项目,做的是生产管理,来了发现他们的项目结构简直烂的要命,和同学们写的毕业设计差不多,然后开发工具用的是vs2008,我电脑是安装了vs2005和vs2010,v ...
- Linux使用fdisk进行磁盘管理
Fdisk分区工具1. Overview*Fdisk是IBM的老牌分区工具,支持绝大多数操作系统,几乎所有的Linux操作系统都默认装有fdisk:包括在Linux Rescue模式下 ...
- Object-C — KVC
1:使用kvc存取对象属性 如果要更改对象属性可以通过什么方法达到呢? (1)通过setter和getter方法. (2)属性. (3)直接设置实例变量. 今天学习新的一种方法:键值编码-kvc.通过 ...
- Action<>和Func<>区别
Action<>和Func<>其实都是委托的[代理]简写形式. 简单的委托写法: //普通的委托 public delegate void myDelegate(string ...
- Jmeter软件测试3--发送二进制报文
一直用Jmeter测试post接口,但报文信息都是明文方式,今天测试兄弟求助二进制报文如何使用Jmeter测试,查看了项目源码,报文中不仅采用二进制,而且还用java.util.zip进行了压缩,从晚 ...
- Open judge 07和为给定数
总时间限制: 1000ms 内存限制: 65536kB 传送门 类似的题传送门 描述 给出若干个整数,询问其中是否有一对数的和等于给定的数. 输入 共三行: 第一行是整数n(0 < n < ...
- PAT_1008 数组元素循环右移问题
题目描述: 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0A1……AN-1)变换为(AN-M …… AN ...
- 中文翻译:pjsip教程(一)之PJNATH简介
在学习pjsip的过程中,发现只是单单的阅读英文官方文档,对于里边概念的理解还是不够透彻,并且苦于pjsip没有发现全一点的中文版本,所以想尽自己所能为建设和谐社会而贡献一份力量,文中定会有所疏漏,希 ...
- MFC可编辑的ListCtrl
近期由于项目的要求,需要一个可以编辑的列表控件,由于MFC提供的列表控件只支持第一行可编辑,无法满足项目需求,故只能自己动手重写一个列表控件.重写列表控件的思想为:当点击列表的某行某列时,在此处创建一 ...