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:

  1. 4
  2. 55
  3. 5 10 15
  4. 4
  5. 0 5 10 20
  6. 4
  7. 0 5 10 15
  8. 4
  9. 18
  10. 1 2 3
  11. 5
  12. 0 3 6 10 12
  13. 6
  14. 0 3 5 7 12 15
  15. 2
  16. 30
  17. 20
  18. 1
  19. 20
  20. 7
  21. 1 3 5 7 11 13 17
  22. 0
输出样例#1:

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

说明

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

  1. #include<iostream>
  2. #include<cstdio>
  3. using namespace std;
  4. int n,t,ti[],m1,a[][],m2,b[][],Case,cnta[],cntb[],ans;
  5. int a1[];
  6. void dfs(int now,int sum,int wait){
  7. if(sum>t)return;
  8. if(wait>=ans)return;
  9. if(now==n){ans=min(ans,wait+(t-sum));}
  10. if(now<n){//可以向右走
  11. for(int i=;i<=cnta[now];i++){
  12. if(a[now][i]<sum)continue;
  13. int sum_time=a[now][i]-sum+ti[now];
  14. dfs(now+,sum+sum_time,wait+a[now][i]-sum);
  15. }
  16. }
  17. if(now>){//可以向左走
  18. for(int i=;i<=cntb[now];i++){
  19. if(b[now][i]<sum)continue;
  20. int sum_time=b[now][i]-sum+ti[now-];
  21. dfs(now-,sum+sum_time,wait+b[now][i]-sum);
  22. }
  23. }
  24. }
  25. int main(){
  26. freopen("Cola.txt","r",stdin);
  27. while(){
  28. scanf("%d",&n);
  29. if(n==)return ;
  30. scanf("%d",&t);
  31. ans=0x7fffffff;
  32. Case++;
  33. printf("Case Number %d: ",Case);
  34. for(int i=;i<n;i++)scanf("%d",&ti[i]);
  35. scanf("%d",&m1);
  36. int mn=0x7fffffff;
  37. for(int i=;i<=m1;i++){
  38. int tim;
  39. scanf("%d",&tim);mn=min(mn,tim);
  40. a1[i]=tim;
  41. for(int j=;j<=n&&tim<=t;j++){
  42. a[j][++cnta[j]]=tim;
  43. tim+=ti[j];
  44. }
  45. }
  46. scanf("%d",&m2);
  47. for(int i=;i<=m2;i++){
  48. int tim;
  49. scanf("%d",&tim);
  50. for(int j=n;j>=&&tim<=t;j--){
  51. b[j][++cntb[j]]=tim;
  52. tim+=ti[j-];
  53. }
  54. }
  55. for(int i=;i<n;i++)mn+=ti[i];
  56. if(mn>t){
  57. printf("impossible\n");
  58. continue;
  59. }
  60. for(int i=;i<=m1;i++){
  61. dfs(,,a1[i]);
  62. }
  63. printf("%d\n",ans);
  64. }
  65. }

0分 只能过样例的暴力

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. using namespace std;
  5. int n,p,t[],m1,t1[],m2,t2[];
  6. int f[][];//在i时,第j个车站等待的时间
  7. bool vis[][][];//在 i 时,第 j 个车站是否有车从 k 方向来
  8. void init(){
  9. memset(f,,sizeof(f));
  10. memset(vis,,sizeof(vis));
  11. memset(t,,sizeof(t));
  12. memset(t1,,sizeof(t1));
  13. memset(t2,,sizeof(t2));
  14. }
  15. void work(int num){
  16. int tmp;
  17. for(int i=;i<=m1;i++){
  18. tmp=t1[i];
  19. for(int j=;j<=n&&tmp<=p;j++){
  20. vis[tmp][j][]=;
  21. tmp+=t[j];
  22. }
  23. }
  24. for(int i=;i<=m2;i++){
  25. tmp=t2[i];
  26. for(int j=n;j>=&&tmp<=p;j--){
  27. vis[tmp][j][]=;
  28. tmp+=t[j-];
  29. }
  30. }
  31. f[][]=;
  32. for(int i=;i<=p;i++){
  33. for(int j=;j<=n;j++){
  34. f[i][j]=min(f[i][j],f[i-][j]+);
  35. if(vis[i][j][]==){
  36. f[i][j]=min(f[i][j],f[i-t[j-]][j-]);
  37. }
  38. if(vis[i][j][]==){
  39. f[i][j]=min(f[i][j],f[i-t[j]][j+]);
  40. }
  41. }
  42. }
  43. if(f[p][n]<=p)printf("Case Number %d: %d\n",num,f[p][n]);
  44. else printf("Case Number %d: impossible\n",num);
  45. }
  46. int main(){
  47. //freopen("Cola.txt","r",stdin);
  48. int num=;
  49. scanf("%d",&n);
  50. while(n!=){
  51. init();
  52. scanf("%d",&p);
  53. for(int i=;i<=n-;i++)scanf("%d",&t[i]);
  54. scanf("%d",&m1);
  55. for(int i=;i<=m1;i++)scanf("%d",&t1[i]);
  56. scanf("%d",&m2);
  57. for(int i=;i<=m2;i++)scanf("%d",&t2[i]);
  58. work(num++);
  59. scanf("%d",&n);
  60. }
  61. }

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. JS性能优化——加载和执行

    JavaScript 在浏览器中的性能,可以认为是开发者所面临得最严重的可用性问题.这个问题因JavaScript的阻塞特性变得复杂, 也就是说当浏览器在执行JavaScript代码时,不能同时做其他 ...

  2. API的理解和使用——全局命令

    全局命令 命令 功能 set 创建键值对 keys 遍历查看所有键 exists 判断一个键是否存在,1存在,0不存在 dbsize 当前数据库中有多少个键 del 删除一个或多个键 expire 设 ...

  3. Java for LeetCode 106 Construct Binary Tree from Inorder and Postorder Traversal

    Construct Binary Tree from Inorder and Postorder Traversal Total Accepted: 31041 Total Submissions: ...

  4. Java for LeetCode 086

    Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...

  5. git常用开发流程

    我们在使用git进行项目管理时,远程仓库的分支情况一般是: master分支作为稳定版分支,用于直接发布产品,dev分支则用于日常开发 备注: 也可以只有一个master分支,这里只介绍第一种情况. ...

  6. Eclipse for PHP Developers使用笔记

    1 修改字体样式:Window-->Preference-->General-->Appearance-->Basic-->text font-->edit

  7. bzoj5093: [Lydsy1711月赛]图的价值

    不难想到考虑每个点的贡献,ans=n*sigema(1~n)i C(n-1,i)*(2^C(n-1,2))*i^k 直接套第二类斯特林拆柿子即可.提示:sigema(1~n)i C(n,i)*C(i, ...

  8. redis持久化【转】

    Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计算集合的并,交和补集(diff ...

  9. 分享知识-快乐自己:SpringMvc中的单多文件上传及文件下载

    摘要:SpringMvc中的单多文件上传及文件下载:(以下是核心代码(拿过去直接能用)不谢) <!--设置文件上传需要的jar--> <dependency> <grou ...

  10. Log4Net的使用之winform

    当我们将asp程序部署到远程服务器上的时候,如果遇到程序错误,如何能快速的判断我们程序的错误呢.所以-->Log4Net作为记录日志的一大神器,不得不学会熟练使用啊!没有那么多的原理,照猫画虎的 ...