类似于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的更多相关文章

  1. 2018.11.09 bzoj2165: 大楼(倍增+floyd)

    传送门 先倍增出iii使得2i2^i2i时间时刚好有每个点能够到mmm层及以上. 然后就可以用floyd+floyd+floyd+倍增求出刚好不超过mmm层的时间,最后再补一层就行了. 代码: #pr ...

  2. bzoj2165: 大楼 (矩阵快速幂)

    //========================== 蒟蒻Macaulish:http://www.cnblogs.com/Macaulish/  转载要声明! //=============== ...

  3. bzoj2165: 大楼(倍增floyd)

    题目大意:一个有向图,n(<=100)个点求一条长度>=m(<=10^18)的路径最少经过几条边. 一开始以为是矩乘,蓝鹅当时还没开始写,所以好像给CYC安利错了嘿嘿嘿QWQ 第一眼 ...

  4. Bzoj2165 大楼

    Time Limit: 40 Sec  Memory Limit: 259 MBSubmit: 779  Solved: 285[Submit][Status][Discuss] Descriptio ...

  5. [转载]hzwer的bzoj题单

    counter: 664BZOJ1601 BZOJ1003 BZOJ1002 BZOJ1192 BZOJ1303 BZOJ1270 BZOJ3039 BZOJ1191 BZOJ1059 BZOJ120 ...

  6. BZOJ刷题列表【转载于hzwer】

    沿着黄学长的步伐~~ 红色为已刷,黑色为未刷,看我多久能搞完吧... Update on 7.26 :之前咕了好久...(足见博主的flag是多么emmm......)这几天开始会抽时间刷的,每天几道 ...

随机推荐

  1. CentOS 6.7下iPython提示“WARNING: Readline services not available or not loaded.”的解决办法

    yum install readline-devel 然后,使用pip或者easy_install安装readline即可 pip install readline

  2. js移除最后一个字符,js替换字符串的连接符号,js移除最后一个分隔符号

    js移除最后一个字符 js移除最后一个分隔符号 js替换字符串的连接符号 >>>>>>>>>>>>>>>> ...

  3. Bootstrap--全局CSS样式之排版

    Bootstrap的排版样式大致和html基本元素一样,没什么大的区别,就是对元素加了样式. (1)标题 HTML 中的所有标题标签,<h1> 到 <h6> 均可使用.另外,还 ...

  4. 请问JAVA三层架构,持久层,业务层,表现层,都该怎么理解?和MVC三层模型有什么区别

    持久层用来固化数据,如常说的DAO层,操作数据库将数据入库业务层用来实现整体的业务逻辑 如 前台获得了数据,逻辑层去解析这些数据,效验这些数据等操作表现层很好解释  你现在看到的网页 一些界面 都属于 ...

  5. Java-struts2 之值栈问题

    这里是根据一个小项目,将数据库的值查出来,然后在页面前台进行遍历的方法 放入值的几种方式: Struts2的三种存值取值的方式 值栈: 栈上下文: ActionContext: package com ...

  6. CI框架篇之模型篇--初识(1)

    模型 模型是专门用来和数据库打交道的PHP类.例如,假设你想用CodeIgniter来做一个Blog. 你可以写一个模型类,里面包含插入.更新.删除Blog数据的方法. 下面的例子将向你展示一个普通的 ...

  7. MVC中HttpContext, HttpContextBase, HttpContextWrapper联系

    HttpContext // // 摘要: // 封装有关个别 HTTP 请求的所有 HTTP 特定的信息. public sealed class HttpContext : IServicePro ...

  8. Scoket简介

    我们很多人都听说过Socket编程也称网络编程,在我们当今的社会中网络已经深入到我们的生活中了,计算机的网络通信也成为我们生活中必不可少的一部分.而实现我们网络通信就得依靠网络编程,让我们的计算机之间 ...

  9. doj常用包

    dojo.raise               抛出一个异常 dojo.errorToString将异常转换为字符串 dojo.render      系统环境对象 dojo.hostenv. ...

  10. objective-c中字符串长度计算

    我们知道,在c语言中,使用sizeof ()计算在内存中占用的字节数, 引用string.h后,使用strlen()计算字符串的长度(不包含\0). 而在object-c中, "length ...