P2583 地铁间谍

题目描述

特工玛利亚被送到S市执行一个特别危险的任务。她需要利用地铁完成他的任务,S市的地铁只有一条线路运行,所以并不复杂。

玛利亚有一个任务,现在的时间为0,她要从第一个站出发,并在最后一站的间谍碰头。玛利亚知道有一个强大的组织正在追踪她,她知道如果一直呆在一个车站,她会有很大的被抓的风险,躲在运行的列车中是比较安全的。所以,她决定尽可能地呆在运行的列车中,她只能往前或往后坐车。

玛利亚为了能准时且安全的到达最后一个车站与对方碰头,需要知道在在车站最小等待时间总和的计划。你必须写一个程序,得到玛丽亚最短的等待时间。当然,到了终点站之后如果时间还没有到规定的时刻,她可以在车站里等着对方,只不过这个等待的时刻也是要算进去的。

这个城市有n个车站,编号是1-n,火车是这么移动的:从第一个车站开到最后一个车站。或者从最后一站发车然后开会来。火车在每特定两站之间行驶的时间是固定的,我们也可以忽略停车的时间,玛利亚的速度极快,所以他可以迅速上下车即使两辆车同时到站。

输入输出格式

输入格式:

输入文件包含多组数据,每组数据都由7行组成

第1行:一个正整数N(2<=N<=50)表示站的数量

第2行:一个正整数T(0<=T<=200)表示需要的碰头时间

第3行:1-(n-1)个正整数(0<ti<70)表示两站之间列车的通过时间

第4行:一个整数M1(1<=M1<=50)表示离开第一个车站的火车的数量

第5行:M1个正整数:d1,d2……dn,(0<=d<=250且di<di+1)表示每一列火车离开第一站的时间

第6行:一个正整数M2(1<=M2<=50)表示离开第N站的火车的数量

第7行:M2个正整数:e1,e2……eM2,(0<=e<=250且ei<ei+1)表示每一列火车离开第N站的时间

最后一行有一个整数0。

输出格式:

对于每个测试案例,打印一行“Case Number N: ”(N从1开始)和一个整数表示总等待的最短时间或者一个单词“impossible”如果玛丽亚不可能做到。按照样例的输出格式。

输入输出样例

输入样例#1:

4
55
5 10 15
4
0 5 10 20
4
0 5 10 15
4
18
1 2 3
5
0 3 6 10 12
6
0 3 5 7 12 15
2
30
20
1
20
7
1 3 5 7 11 13 17
0
输出样例#1:

Case Number 1: 5
Case Number 2: 0
Case Number 3: impossible

说明

第一组样例说明,她0分钟时上车,在3号站下车,立刻坐上(0分始发)15分开的车回去,到2号车站,立刻坐上(20分始发)25开的车到终点,50分到,还需要等待5分钟。

#include<iostream>
#include<cstdio>
using namespace std;
int n,t,ti[],m1,a[][],m2,b[][],Case,cnta[],cntb[],ans;
int a1[];
void dfs(int now,int sum,int wait){
if(sum>t)return;
if(wait>=ans)return;
if(now==n){ans=min(ans,wait+(t-sum));}
if(now<n){//可以向右走
for(int i=;i<=cnta[now];i++){
if(a[now][i]<sum)continue;
int sum_time=a[now][i]-sum+ti[now];
dfs(now+,sum+sum_time,wait+a[now][i]-sum);
}
}
if(now>){//可以向左走
for(int i=;i<=cntb[now];i++){
if(b[now][i]<sum)continue;
int sum_time=b[now][i]-sum+ti[now-];
dfs(now-,sum+sum_time,wait+b[now][i]-sum);
}
}
}
int main(){
freopen("Cola.txt","r",stdin);
while(){
scanf("%d",&n);
if(n==)return ;
scanf("%d",&t);
ans=0x7fffffff;
Case++;
printf("Case Number %d: ",Case);
for(int i=;i<n;i++)scanf("%d",&ti[i]);
scanf("%d",&m1);
int mn=0x7fffffff;
for(int i=;i<=m1;i++){
int tim;
scanf("%d",&tim);mn=min(mn,tim);
a1[i]=tim;
for(int j=;j<=n&&tim<=t;j++){
a[j][++cnta[j]]=tim;
tim+=ti[j];
}
}
scanf("%d",&m2);
for(int i=;i<=m2;i++){
int tim;
scanf("%d",&tim);
for(int j=n;j>=&&tim<=t;j--){
b[j][++cntb[j]]=tim;
tim+=ti[j-];
}
}
for(int i=;i<n;i++)mn+=ti[i];
if(mn>t){
printf("impossible\n");
continue;
}
for(int i=;i<=m1;i++){
dfs(,,a1[i]);
}
printf("%d\n",ans);
}
}

0分 只能过样例的暴力

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,p,t[],m1,t1[],m2,t2[];
int f[][];//在i时,第j个车站等待的时间
bool vis[][][];//在 i 时,第 j 个车站是否有车从 k 方向来
void init(){
memset(f,,sizeof(f));
memset(vis,,sizeof(vis));
memset(t,,sizeof(t));
memset(t1,,sizeof(t1));
memset(t2,,sizeof(t2));
}
void work(int num){
int tmp;
for(int i=;i<=m1;i++){
tmp=t1[i];
for(int j=;j<=n&&tmp<=p;j++){
vis[tmp][j][]=;
tmp+=t[j];
}
}
for(int i=;i<=m2;i++){
tmp=t2[i];
for(int j=n;j>=&&tmp<=p;j--){
vis[tmp][j][]=;
tmp+=t[j-];
}
}
f[][]=;
for(int i=;i<=p;i++){
for(int j=;j<=n;j++){
f[i][j]=min(f[i][j],f[i-][j]+);
if(vis[i][j][]==){
f[i][j]=min(f[i][j],f[i-t[j-]][j-]);
}
if(vis[i][j][]==){
f[i][j]=min(f[i][j],f[i-t[j]][j+]);
}
}
}
if(f[p][n]<=p)printf("Case Number %d: %d\n",num,f[p][n]);
else printf("Case Number %d: impossible\n",num);
}
int main(){
//freopen("Cola.txt","r",stdin);
int num=;
scanf("%d",&n);
while(n!=){
init();
scanf("%d",&p);
for(int i=;i<=n-;i++)scanf("%d",&t[i]);
scanf("%d",&m1);
for(int i=;i<=m1;i++)scanf("%d",&t1[i]);
scanf("%d",&m2);
for(int i=;i<=m2;i++)scanf("%d",&t2[i]);
work(num++);
scanf("%d",&n);
}
}

100分 dp

洛谷P2583 地铁间谍的更多相关文章

  1. uva A Spy in the Metro(洛谷 P2583 地铁间谍)

    A Spy in the Metro Secret agent Maria was sent to Algorithms City to carry out an especially dangero ...

  2. 洛谷2583 地铁间谍 (UVa1025A Spy in the Metro)

    洛谷2583 地铁间谍(UVa1025A Spy in the Metro) 本题地址:http://www.luogu.org/problem/show?pid=2583 题目描述 特工玛利亚被送到 ...

  3. 缩点【洛谷P1262】 间谍网络

    [洛谷P1262] 间谍网络 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他 ...

  4. 洛谷P1710 地铁涨价

    P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交  讨论  题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...

  5. 洛谷 P1262 【间谍网络】

    题库 : 洛谷 题号 : 1262 题目 : 间谍网络 link : https://www.luogu.org/problemnew/show/P1262 思路 : 这题可以用缩点的思想来做.先用T ...

  6. 地铁间谍 洛谷 p2583

    题目描述 特工玛利亚被送到S市执行一个特别危险的任务.她需要利用地铁完成他的任务,S市的地铁只有一条线路运行,所以并不复杂. 玛利亚有一个任务,现在的时间为0,她要从第一个站出发,并在最后一站的间谍碰 ...

  7. 洛谷 P1710 地铁涨价

    题目背景 本题开O2优化,请注意常数 题目描述 博艾市除了有海底高铁连接中国大陆.台湾与日本,市区里也有很成熟的轨道交通系统.我们可以认为博艾地铁系统是一个无向连通图.博艾有N个地铁站,同时有M小段地 ...

  8. 洛谷P1710地铁涨价

    题目背景 本题开O2优化,请注意常数 题目描述 博艾市除了有海底高铁连接中国大陆.台湾与日本,市区里也有很成熟的轨道交通系统.我们可以认为博艾地铁系统是一个无向连通图.博艾有N个地铁站,同时有M小段地 ...

  9. 「洛谷P1262」间谍网络 解题报告

    P1262 间谍网络 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意 ...

随机推荐

  1. CUDA: 原子操作

    1.1以上计算功能集支持全局内存上的原子操作, 1.2以上支持共享内存上的原子操作. atomicAdd(add,y)将生成一个原子的操作序列,这个操作序列包括读取地址addr处的值,将y增加到这个值 ...

  2. [2018-05-27]配置VSTS认证方式使用Personal Access Token

    本文介绍下如何配置VSTS(visual studio team service,其实就是微软SaaS版的TFS)通过Personal Access Token访问其下的Git代码库. 问题 使用gi ...

  3. python输出shell命令执行结果

    import os,subprocess p = subprocess.Popen("df -h", shell=True, stdout=subprocess.PIPE) out ...

  4. SPOJ - GSS1 —— 线段树 (结点信息合并)

    题目链接:https://vjudge.net/problem/SPOJ-GSS1 GSS1 - Can you answer these queries I #tree You are given ...

  5. pycharm解决Inconsistent indentation:mix of tabs and spaces

  6. matlab打开文件对话框

    [filename, pathname, filterindex] = uigetfile({'*.xyz', '点云文件 (*.xyz)';'*.*', 'All Files (*.*)'},'请选 ...

  7. BZOJ 3398 [Usaco2009 Feb]Bullcow 牡牛和牝牛:dp【前缀和优化】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3398 题意: 约翰要带N(1≤N≤100000)只牛去参加集会里的展示活动,这些牛可以是牡 ...

  8. 我所理解的RESTful Web API [Web标准篇]【转】

    原文:http://www.cnblogs.com/artech/p/restful-web-api-01.html REST不是一个标准,而是一种软件应用架构风格.基于SOAP的Web服务采用RPC ...

  9. tensorflow 线性回归 iris

    线性拟合

  10. codeforces 659F F. Polycarp and Hay(并查集+bfs)

    题目链接: F. Polycarp and Hay time limit per test 4 seconds memory limit per test 512 megabytes input st ...