类似于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. Linux服务器常用性能监控命令汇总

    1.ifconfig 网卡数目.ip地址.Mac地址.MTU大小 eth0 Link encap:Ethernet HWaddr 00:0d:3a:50:12:e9 inet addr:10.0.0. ...

  2. php快速排序

    快速排序是排序中常用的,效率据说还不错,它使用分治算法实现 将一个大的需要排序的序列,分成两个较小的序列!怎么分呢,需要从序列中找出一个元素作为参考元素,通常的做法是拿第一个元素作为参考元素.当一个序 ...

  3. Java-Android 之动画的实现

    一:显示隐藏动画 在res目录下创建一个anim目录,然后在里面创建一个alpha.xml文件 <?xml version="1.0" encoding="utf- ...

  4. Java SE (2)之 Graphics 画图工具

    Graphics 绘图类: 提供两个方法.Paint (绘图,被系统自动调用)    repaint(重绘) Paint 调用原理(1.窗口最大化,再最小化 窗口的大小发生变化 Repaint函数被调 ...

  5. Shell: how to list all db links in oracle DB to generate a flat file (生成dblink列表文件)

    如果数据库里有上百个DATABASE LINK, 而且同时要管理几十套这样的数据库,在日后改数据库用户密码时就要格外注意是否有DB LINK在使用,否则只改了LOCAL DB 的用户密码,没有级连修改 ...

  6. Delphi OO

    深入Delphi编程(OOP) 日期:2007年11月9日 作者:左轻侯 人气: 2595 查看:[大字体 中字体 小字体] 刚刚接触的Delphi的朋友,可能最感兴趣的就是它丰富.强大的VCL(可视 ...

  7. 集成支付宝报一堆warning: (arm64) /Users/scmbuild/workspace/standard-pay/.....警告问题解决办法亲测可行!

  8. [转载] java中byte数组与int,long,short间的转换

    文章转载自http://blog.csdn.net/leetcworks/article/details/7390731 package com.util; /** * * <ul> * ...

  9. SGU 269. Rooks(DP)

    题意: 给n(<=250)条水平网格,然后在上面放k棋子,每行每列都只能放一个.求方法总数. Solution: 简单的DP, 只要对给出的水平长度排个序就很容易处理了. 需要用到高精度. 偷懒 ...

  10. thinkphp关联查询(多表查询)

    1.Table方法:定义要操作的数据表名称,可以动态改变当前操作的数据表名称,需要写数据表的全名,包含前缀,可以使用别名, 例如: $Model->Table('think_user user' ...