传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2516

【题解】

状压dp。

$f_{sta,i}$表示状态为sta,当前在第i层的最小花费时间。状态是个三进制表示,0代表没进过电梯;1代表在电梯里;2表示进过电梯,出来了。

然后考虑当前状态转移出去即可。复杂度$O(Cas * 3^n * nm)$,成功垫底。

据说用2个二进制可以更快(逃

# include <vector>
# include <stdio.h>
# include <string.h>
# include <iostream>
# include <algorithm>
// # include <bits/stdc++.h> using namespace std; typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
const int M = 5e5 + ;
const int mod = 1e9+, inf = 1e9;
const int STATUS_SIZE = + ; int n, m, fir, bin[];
int f[STATUS_SIZE][], s[];
struct pa {
int t, a, b;
pa() {}
pa(int t, int a, int b) : t(t), a(a), b(b) {}
}p[]; vector<int> ps; # define abs(x) ((x) > ? (x) : -(x))
# define bit(x, i) (((x) / bin[i]) % )
# define dist(i, j) (abs(ps[j-] - ps[i-])) inline int getid(int x) {
return lower_bound(ps.begin(), ps.end(), x) - ps.begin() + ;
} inline void gmin(int &a, int b) {
if(b < a) a = b;
} inline void sol() {
cin >> n >> fir;
ps.clear(); ps.push_back(fir);
for (int i=; i<=n; ++i) {
scanf("%d%d%d", &p[i].t, &p[i].a, &p[i].b);
ps.push_back(p[i].a);
ps.push_back(p[i].b);
}
sort(ps.begin(), ps.end());
ps.erase(unique(ps.begin(), ps.end()), ps.end());
for (int i=; i<=n; ++i) {
p[i].a = getid(p[i].a);
p[i].b = getid(p[i].b);
}
fir = getid(fir); m = ps.size();
for (int sta=; sta<bin[n]; ++sta) for (int i=; i<=m; ++i) f[sta][i] = inf;
for (int i=; i<=m; ++i) f[][i] = dist(i, fir);
for (int sta=; sta<bin[n]; ++sta) {
for (int i=; i<=m; ++i) {
for (int j=; j<=n; ++j) {
if(bit(sta, j-) == ) gmin(f[sta+bin[j-]][p[j].b], max(f[sta][i] + dist(p[j].b, i), p[j].t));
else if(bit(sta, j-) == ) gmin(f[sta+bin[j-]][p[j].a], max(f[sta][i] + dist(p[j].a, i), p[j].t));
}
}
}
int ans = inf;
for (int i=; i<=m; ++i) gmin(ans, f[bin[n]-][i]);
cout << ans << endl;
} int main() {
bin[] = ; for (int i=; i<=; ++i) bin[i] = bin[i-]*;
int T; cin >> T;
while(T--) sol();
return ;
}

 

bzoj2516 电梯的更多相关文章

  1. 自己动手C#模拟电梯的运行V1.0

    电梯调度有很多种模式,参见http://www.cnblogs.com/jianyungsun/archive/2011/03/16/1986439.html 1.1先来先服务算法(FCFS) 先来先 ...

  2. 浮动【电梯】或【回到顶部】小插件:iElevator.js

    iElevator.js 是一个jquery小插件,使用简单,兼容IE6,支持UMD和3种配置方式,比锚点更灵活. Default Options _defaults = { floors: null ...

  3. Pair Project: Elevator Scheduler [电梯调度算法的实现和测试] --11061188刘强

    结对编程总结 队员:刘强(11061188) 林谋武(11061169) 结对编程: 结对编程的优点: 1.  两个人合作,相比于一个人自己奋斗而言,更能激发自己的潜能:我们在合作过程中,互相学习,互 ...

  4. Pair Project:电梯控制程序

    12061160刘垚鹏 & 12061166宋天舒 1.1结对编程的优缺点结对编程相对于个人编程有很多优点.首先,督促作用,在讨论过程中能够很快投入工作,为了不耽误对方时间,我们会尽快完成各自 ...

  5. luogu[1135]奇怪的电梯

    题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮:开 ...

  6. 关于软件工程结对编程作业 PairProject : Elevator Scheduler(电梯调度算法的实现与测试)的总结

    1)结对编程队友 1106xxxx 张扬 1106xxxx 杨军 其中,此项目的编程实现主要由前者完成. 2)关于结对编程 结对编程的优点: 最直接的一点:在结对编程中,由于有另一个人在你身边和你配合 ...

  7. TYVJ P3522 &&洛谷 P1135 奇怪的电梯 Label:bfs

    题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮:开 ...

  8. 【软件工程】电梯调度的初步实现 李亚文&&郭莉莉

    一.开门见山,代码粘 using System; using System.Collections.Generic; using System.Data; using System.Drawing; ...

  9. 【软件工程】电梯调度程序需求分析 李亚文&&郭莉莉

    2014年3月4日(14:00-16:00) 为了进一步理解电梯工作的原理,我们特地到石家庄铁道大学春晖楼坐了电梯:春晖楼东办共有电梯两部,最高楼层为11层,最低楼层为-1,两电梯可共同使用.结合调查 ...

随机推荐

  1. 展示github中的页面(Github Pages)

    一.创建一个仓库,名为"user_name.github.io"(此处user_name替换为你自己的github用户名),并在根目录下创建index.html,则该仓库下的所有h ...

  2. ACM 第四天

    A - 最短路 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的 ...

  3. html 怎么去掉网页的滚动条

    <style type="text/css"> body{ overflow:scroll; overflow-x:hidden; } </style> 这 ...

  4. ajax 请求 后台返回的文件流

    download(url) { var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); // 也可以使用POST方式,根据接口 xhr. ...

  5. Qt信号与槽机制

    一.信号和槽机制 信号和槽用于两个对象之间的通信,信号和槽机制是Qt的核心特征,也是Qt不同于其他开发框架的最突出的特征.在GUI编程中,当改变了一个部件时,总希望其他部件也能了解到该变化.更一般来说 ...

  6. (沒有介紹標準算法的)RMQ問題

    感謝杜哥代碼滋磁 //以下是廢話 RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中 ...

  7. 【题解】CF#855 G-Harry Vs Voldemort

    个人感觉挺有意思的,然而被颜神D无聊惹(- ̄▽ ̄)- 这题我们可以首先试图去统计以每一个点作为 w 点所能对答案造成的贡献是多少.不难发现,当且仅当 u 和 v 都在 w 所在边双的一侧的时候不能构成 ...

  8. CF484E Sign on Fence && [国家集训队]middle

    CF484E Sign on Fence #include<bits/stdc++.h> #define RG register #define IL inline #define _ 1 ...

  9. POJ3621:Sightseeing Cows——题解

    http://poj.org/problem?id=3621 全文翻译参自洛谷:https://www.luogu.org/problemnew/show/P2868 题目大意:一个有向图,每个点都有 ...

  10. bzoj2058: [Usaco2010 Nov]Cow Photographs(逆序对)

    题目大意:给出n个数的序列,每次可以交换相邻的两个数,问把序列变成编号i在编号i+1左边,编号1在编号n右边(一个环)最少需要多少步.如:35421最少交换两次变为34512. 一开始看到这题,只会O ...