类似于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. Task类(任务)

    任务表示应完成的某个单元的工作.这个单元的工作可以在单独的线程中运行,也可以以同步方式启动一个任务,这需要等待主调用线程.使用任务不仅可以获得一个抽象层,还可以对底层线程进行很多控制. 1.启动任务 ...

  2. JavaScript原型模式

    一.提到原型模式,和构造函数关系密切,先讲一下它 javascript没有类,通过函数来模拟实现类,用new来创建对象,函数内部的this指针来指向调用它的对象. 事例中创建对象myGril,这个对象 ...

  3. Apache common包应用集合

    一.Commons BeanUtils http://jakarta.apache.org/commons/beanutils/index.html 说明:针对Bean的一个工具集.由于Bean往往是 ...

  4. (转)教你如何使用php session

    PHP session用法其实很简单它可以把用户提交的数据以全局变量形式保存在一个session中并且会生成一个唯一的session_id,这样就是为了多了不会产生混乱了,并且session中同一浏览 ...

  5. GPS定位,经纬度附近地点查询–C#实现方法

    目前的工作是需要手机查找附近N米以内的商户,功能如下图 数据库中记录了商家在百度标注的经纬度(如:116.412007, 39.947545), 最初想法  以圆心点为中心点,对半径做循环,半径每增加 ...

  6. NFC简介

    NFC简介 NFC是Near Field Communication缩写,即近距离无线通讯技术.由飞利浦和索尼公司共同开发的NFC是一种非接触式识别和互联技术,可以在移动设备.消费类电子产品.PC 和 ...

  7. CSS Outlines

    轮廓(outline)是绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用. 轮廓(outline)属性指定了样式,颜色和外边框的宽度. 轮廓(outline)实例 在元素周围画线本例演 ...

  8. 注解 @RequestMapping

    通过RequestMapping注解可以定义不同的处理器映射规则. 1.URL路径映射 @RequestMapping(value="/item")或@RequestMapping ...

  9. [Introduction to programming in Java 笔记] 1.3.9 Factoring integers 素因子分解

    素数 A prime is an integer greater than one whose only positive divisors are one and itself.整数的素因子分解是乘 ...

  10. Exercise DS

    #include <iostream> using namespace std; typedef struct Node { Node *next; int data; }Node, *L ...