UVa10801 - Lift Hopping

2024-01-28 06:58
文章标签 lift hopping uva10801

本文主要是介绍UVa10801 - Lift Hopping,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        题意:一栋摩天楼(0~99层)有n个电梯。每个电梯的速度是不一样的,第i个电梯运行(上下)一层要花Ti秒,每个电梯只在某些楼层停,换电梯需要等1分钟。你现在在0层,去往k层,问最少要花多少时间。

        思路:SPFA求最短路。

        不过这个题建图不是那么好建,索性不建图了。我联想到了平行宇宙。。。假设这个楼在5个世界里都存在。。“穿越”到另一个世界需要花一分钟。。。好吧。。我的方法是把楼视为有500层,第一个电梯只能去0~99层,第二个电梯100~199,其他的类推。然后把那些电梯能停的楼层标记出来,写一个函数计算状态转移的时间,就可以从起点开始SPFA了,详见代码。


#include <iostream>
#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <iomanip>
#include <cstdlib>
#include <string>
#include <memory.h>
#include <vector>
#include <queue>
#include <stack>
#include <ctype.h>
#define INF 1000000000
using namespace std;int T[5];//每个电梯上下一楼时间 
bool enable[510];
int ans[510];int time(int f1,int f2){int e1=f1/100;int e2=f2/100;if(e1==e2){return abs(f1-f2)*T[e1];}else{if(!(f1%100)){return 0;}else{return 60;}}
}int main(){int n,k;while(cin>>n>>k){memset(enable,0,sizeof(enable));for(int i=0;i<510;i++)ans[i]=INF;for(int i=0;i<5;i++)ans[i*100]=0;for(int i=0;i<n;i++){cin>>T[i];}for(int i=0;i<n;i++){int j;while(cin>>j){enable[j+i*100]=true;if(getchar()=='\n')break;}}queue<int> que;if(enable[0])que.push(0);//入队的时候不能少了if(enable[100])que.push(100);if(enable[200])que.push(200);if(enable[300])que.push(300);if(enable[400])que.push(400);while(!que.empty()){int cur=que.front();int e=cur/100;int f=cur%100;que.pop();for(int i=e*100;i<(e+1)*100;i++){if(enable[i]){if( (ans[cur]+time(cur,i))<ans[i] ){ans[i]=(ans[cur]+time(cur,i));que.push(i);}}}for(int i=0;i<5;i++){if(enable[i*100+f]){if( (ans[cur]+time(cur,i*100+f))<ans[i*100+f] ){ans[i*100+f]=(ans[cur]+time(cur,i*100+f));que.push(i*100+f);}}}}int t=INF;for(int i=0;i<5;i++){if(ans[i*100+k]<t){t=ans[i*100+k];}}if(t==INF){cout<<"IMPOSSIBLE"<<endl;}else{cout<<t<<endl;}}return 0;
}



这篇关于UVa10801 - Lift Hopping的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/652827

相关文章

hdu a strang lift

按得最短路做的,DP 搜索也能搞 #include <cstdio>#include <cstring>#include <algorithm>#include <vector>#include <queue>using namespace std;#define MAX_N 10000#define INF 0xfffftypedef pair<int, int> P;in

Codeforces 479E Riding in a Lift(dp)

题目链接:Codeforces 479E Riding in a Lift 题目大意:有一栋高N层的楼,有个无聊的人在A层,他喜欢玩电梯,每次会做电梯到另外一层。但是这栋楼里有个秘 密实验室在B层,所以每次他移动的时候就有了一个限制,x为当前所在层,y为目标层,|x - y| < |x - b|。问说移动K次 后,有多少不同的路径。 解题思路:dp[i][j]表示在第i步到达j层

LSS (Lift, Splat, Shoot)代码解析

文章目录 论文研究背景算法实现过程梳理一、相关参数设置二、模型相关参数三、算法前向过程 论文研究背景 LSS是一篇发表在ECCV 2020上有关自动驾驶感知方向的论文,具体子任务为object segmentation and map segmentation。论文和官方repo如下: 论文:https://link.zhihu.com/?target=https%3A//ar

UVA821 Page Hopping 解题报告

UVA821 Page Hopping 解题报告 题目链接 https://vjudge.net/problem/UVA-821 题目大意 最近的研究表明,互联网上任何一个网页在平均情况下最多只需要单击19次就能到达任意一个其他网页。如果把网页看成一个有向图中的结点,则该图中任意两点间最短距离的平均值为19。输入一个n(1≤n≤100)个点的有向图,假定任意两点之间都相互到达,求任意两

[CF1523H]Hopping Around the Array

Hopping Around the Array 题解 **卡常题。 我们可以先将删除一个格子的操作看成用代价 0 0 0跳过一个格子,跳到 x + a x x+a_{x} x+ax​视作代价为 1 1 1的跳跃。 由于 k k k值较小,我们可以先设计一个dp,令 d p i , j , k dp_{i,j,k} dpi,j,k​表示从点 i i i出发进行 j j j次代价为 1 1

2017.05.25回顾 lift转roc 不会出现前期发力模型

1、上午连续写了两篇小结 2、继续上一篇小结中的第一个问题,定性上觉得可以loss来判断,但是觉得定量上证明比较复杂,我就曲线救国,研究了下这些lift画出roc是什么样子 蓝线是我正常模型的lift曲线,红线是根据boss的描述画出来的,因为E(lift) = 1(这里有错,是当每个decile接近于等分的时候有这个性质),所以红线后面只能越来越平缓,直线是我自己构造出来的,每个dec

【论文笔记】Lift-Attend-Splat: Bird’s-eye-view camera-lidar fusion using transformers

原文链接:https://arxiv.org/abs/2312.14919 1. 引言 多模态融合时,由于不同模态有不同的过拟合和泛化能力,联合训练不同模态可能会导致弱模态的不充分利用,甚至会导致比单一模态方法性能更低。 目前的相机-激光雷达融合方法多基于Lift-Splat,即基于深度估计投影图像特征到BEV,再与激光雷达特征融合。这高度依赖深度估计的质量。本文发现深度估计不能为这些

A strange lift

题目: There is a strange lift.The lift can stop can at every floor as you want, and there is a number Ki(0 <= Ki <= N) on every floor.The lift have just two buttons: up and down.When you at floor i,if

UVa11248 - Frequency Hopping

题意:给定一个有向网络,每条边均有一个容量。问是否存在一个从点1到点N,流量为C的流。如果不存在,是否可以恰好修改一条弧的容量,使得存在这样的流?         思路:白书训练指南第一道网络流例题。。先求一次最大流,如果流量至少为C,输出possible,否则需要修改的弧一定是最小割里的弧。依次把这些弧的容量增加到C,然后求最大流,看最大流是否至少为C。不过这样做会超时,需要两