Description

Input

Output

状压dp,状态表示为表示当前在第x层,电梯内有哪些人,哪些人还没到终点

#include<cstdio>
#include<cstring>
#include<algorithm>
int T,n,k,ts[],as[],bs[],xs[];
int h[][],f[][],tr[][];
int abs(int x){return x>?x:-x;}
void mins(int&a,int b){a>b?a=b:;}
int max(int a,int b){return a>b?a:b;}
int main(){
for(scanf("%d",&T);T;--T){
scanf("%d%d",&n,&k);
int xp=;
for(int i=;i<n;++i){
scanf("%d%d%d",ts+i,as+i,bs+i);
xs[xp++]=as[i];
xs[xp++]=bs[i];
}
int mx=<<n,idp=;
for(int i=;i<mx;++i)for(int j=;j<mx;++j)if((i|j)==i){
tr[idp][]=i;tr[idp][]=j;
h[i][j]=idp++;
}
memset(f,0x3f,sizeof(f[])*(idp+));
std::sort(xs,xs+xp);
xp=std::unique(xs,xs+xp)-xs;
for(int i=;i<n;++i){
as[i]=std::lower_bound(xs,xs+xp,as[i])-xs;
bs[i]=std::lower_bound(xs,xs+xp,bs[i])-xs;
}
for(int i=;i<xp;++i)f[][i]=abs(xs[i]-k);
for(int i=;i<idp-;++i){
int A=tr[i][],B=tr[i][],*F0=f[i];
for(int k=;k<n;++k)if(A>>k&){
if(B>>k&)continue;
int&F=f[h[A][B|<<k]][bs[k]],_x=xs[bs[k]];
for(int j=;j<xp;++j)mins(F,F0[j]+abs(xs[j]-_x));
}else{
int&F=f[h[A|<<k][B]][as[k]],_x=xs[as[k]];
for(int j=;j<xp;++j)mins(F,max(ts[k],F0[j]+abs(xs[j]-_x)));
}
}
int ans=0x3f3f3f3f;
for(int i=;i<xp;++i)mins(ans,f[idp-][i]);
printf("%d\n",ans);
}
return ;
}

bzoj 2516: 电梯的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. [BZOJ 2165] 大楼 【DP + 倍增 + 二进制】

    题目链接:BZOJ - 2165 题目分析: 这道题我读了题之后就想不出来怎么做,题解也找不到,于是就请教了黄学长,黄学长立刻秒掉了这道题,然后我再看他的题解才写出来..Orz 使用 DP + 倍增 ...

  3. bzoj2516 电梯

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2516 [题解] 状压dp. $f_{sta,i}$表示状态为sta,当前在第i层的最小花费时 ...

  4. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

  5. BZOJ 3275: Number

    3275: Number Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 874  Solved: 371[Submit][Status][Discus ...

  6. BZOJ 2879: [Noi2012]美食节

    2879: [Noi2012]美食节 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1834  Solved: 969[Submit][Status] ...

  7. bzoj 4610 Ceiling Functi

    bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...

  8. BZOJ 题目整理

    bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...

  9. 【sdoi2013】森林 BZOJ 3123

    Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数.第三行包含N个非负整数 ...

随机推荐

  1. bzoj3065

    题解: 替罪羊树 (讲道理昨天讲课我一点都听不懂) alpha取到0.75比较好(当然啦可能其他的更好) 每当不满足条件的时候就重构 代码: #include<bits/stdc++.h> ...

  2. Python Django 之 Views HttpRequest HttpReponse

    一.Python Django 之 Views 数据交互 http请求中产生两个人核心对象: http请求:HttpRequest对象 http响应:HttpReponse对象 所在位置django. ...

  3. Programming Contest Ranking(题解)

    Programming Contest Ranking . 题目描述 Heilongjiang Programming Contest will end successfully! And your ...

  4. Spring学习笔记之Testing

    测试嘛,一般也就两种,一种就是单元测试,另外一个就是集成测试.都是废话 一.单元测试 以前也就是搞个模拟,main函数一写搞定. 现在呢,有了个spring,也有了个推荐规范?这个是个什么东西?什么叫 ...

  5. 1017 A除以B

    本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数.你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立. 输入格式: 输入在一行中依次给出 A 和 B,中间以 ...

  6. 关于Kynseed

    简介:故事发生在Quill地区,玩家将扮演一个家族中的好几代人.你可以在游戏中选择自己的性别,建立农场,成立家族,探索这片土地中的秘密.游戏特色包括不断衰老的世界.所有生物都拥有记忆,并且会不断变老. ...

  7. Okhttp之CallServerInterceptor简单分析

    在Okhttp源码分析专栏的几篇博客分析了Okhttp几个拦截器的主要功能,还剩下最后一个拦截器CallServerInterceptor没有分析,本篇博客就简单分析下该拦截器的功能. 在Okhttp ...

  8. select 从应用层到内核实现解析

    在一个应用中,如果需要读取多个设备文件,这其中有多种实现方式: 1.使用一个进程,并采用同步查询机制,不停的去轮询每一个设备描述符,当设备描述符不可用时,进程睡眠. 2:使用多个进程或者线程分别读取一 ...

  9. 51Nod 1009:1009 数字1的数量 (思维)

    1009 数字1的数量  基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的 ...

  10. CTF-练习平台-Misc之 隐写2

    二.隐写2 下载文件后解压,发现是一个png图片,依照老套路查看属性,没有发现 用WinHex打开,在图片文件中,修改图片宽度,将箭头处的A改为F,保存后打开图片 发现flag(对于png的文件格式详 ...