城市里的间谍

 

城市里的间谍

难度级别:C; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B

试题描述

某城市的地铁是线性的,有 n(2 <= n <= 50)个车站,从左到右编号为 1 到 n。有 M1 辆列车从第 1 站开始往右开,还有 M2 辆列车从第 n 站开始往左开。在时刻 0,Mario 从第 1 站出发,目的是在时刻 T( 0 <= T <= 200 )会见车站 n 的一个间谍。在车站等车时容易被抓,所以她决定尽量躲开在开动的火车上,让在车站等待的总时间尽量短。列车靠站停车时间忽略不计,且 Mario 身手敏捷,即使两辆方向不同的列车在同一时间靠站,Mario也能完成换乘。

输入

第一行包含两个数,分别为 n 和 T,第二行有 n-1 个整数,分别为 T1,T2,……,Tn-1,其中 Ti 表示地铁从车站 i 到车站 i+1 行驶的时间(两个方向一样)。第三行为 m,表示从第 1 站出发向右开的列车数目,第四行有 m 个整数,D1,D2,……,Dm(严格递增序列),即各列车的出发时间。第五行和第六行描述从第 n 站出发向左开的列车,格式同第三行和第四行。

输出

有解时输出一个数,表示最少等待时间;无解时就输出impossible。

输入示例

3 185
3 1
15
2 8 16 17 28 31 38 41 75 86 91 128 151 153 171
26
1 2 11 16 31 33 47 50 51 55 56 61 66 67 82 93 94 95 108 112 114 142 145 161 171 183

输出示例

123

试题分析

首先,最容易想到的办法就是把每一站的一种情况都枚举一遍,最后取最优解,但这种情况所需要的情况复杂,而且代码效率低,在时间上和空间上都肯定会超限,所以不可取。

但是我们可以将代码优化一下,也就是用DP来解决这个问题。最后优化后的代码如下:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<cmath>
  5. #include<algorithm>
  6. using namespace std;
  7. int t[],d1[],d2[],dp[][];
  8. int main(){
  9. int n,T,m1,m2;
  10. cin>>n>>T;
  11. for(int i=;i<=n;i++){
  12. cin>>t[i];
  13. t[i]+=t[i-];
  14. }
  15. cin>>m1;
  16. for(int i=;i<=m1;i++){
  17. int x;
  18. cin>>x;
  19. d1[x]=;
  20. }
  21. cin>>m2;
  22. for(int i=;i<=m2;i++){
  23. int y;
  24. cin>>y;
  25. d2[y]=;
  26. }
  27. memset(dp,0x7f,sizeof(dp));
  28. dp[][]=;
  29. for(int i=;i<=T;i++){
  30. for(int j=;j<=n;j++){
  31. dp[i][j]=dp[i-][j]+;
  32. if(j> && i>=t[j] && d1[i-t[j]])
  33. dp[i][j]=min(dp[i][j],dp[i-(t[j]-t[j-])][j-]);
  34. if(j<n && i>=(t[n]-t[j]) && d2[i-(t[n]-t[j])])
  35. dp[i][j]=min(dp[i][j],dp[i-(t[j+]-t[j])][j+]);
  36. }
  37. }
  38. if(dp[T][n]>)
  39. cout<<"impossible";
  40. else
  41. cout<<dp[T][n];
  42. return ;
  43. }
  44. /*dp[i][j]为第i秒时,间谍在第j个车站
  45. 对于每个状态,有三种决策
  46. 1.等待一秒,dp[i][j]=dp[i+1][j]+1;
  47. 2.这时车站有向右开的车,dp[i][j]=dp[[i+t[j]][j+1];
  48. 3.这时车站有向左开的车,dp[i][j]=dp[i+t[j-1]][j-1];
  49. 处理边界

城市里的间谍

你——悟到了么?

城市里的间谍B901的更多相关文章

  1. UVa-1025城市里的间谍 A Spy in the Metro

    原题 城市里的间谍 分析 动态规划,dp[i][j]表示你在时刻i,车站j,最少还要等待的时间. 边界条件d[T][n]=0 已经到达,其他d[T][i]=inf不可达. 在一个站点时,有以下三种决策 ...

  2. 9-1 A Spy in the Metro uva1025 城市里的间谍 (DP)

    非常有价值的dp题目  也是我做的第一题dp    真的效率好高 题意:某城市的地铁是线性的 有n个车站 从左到右编号为1-n  有m1辆列车从第一站开始往右开 还有m2辆列车从第n站开始往左开  在 ...

  3. UVa 1025 城市里的间谍

    https://vjudge.net/problem/UVA-1025 题意:一个间谍要从第一个车站到第n个车站去会见另一个,在是期间有n个车站,有来回的车站,让你在时间T内时到达n,并且等车时间最短 ...

  4. UVA1025 城市里的间谍

    #include<iostream> #include<cstdio> #include<memory.h> using namespace std; #defin ...

  5. 【动态规划】[UVA1025]A Spy in the Metro 城市里的间谍

    参考:https://blog.csdn.net/NOIAu/article/details/71517440 https://blog.csdn.net/c20180630/article/deta ...

  6. 我不就是吃点肉,应该没事吧——爬取一座城市里的烤肉店数据(附完整Python爬虫代码)

    写在前面的一点屁话: 对于肉食主义者,吃肉简直幸福感爆棚!特别是烤肉,看着一块块肉慢慢变熟,听着烤盘上"滋滋"的声响,这种期待感是任何其他食物都无法带来的.如果说甜点是" ...

  7. DP小合集

    1.Uva1625颜色的长度 dp[i][j]表示前一个串选到第i个 后一个串选到第j个 的最小价值 记一下还有多少个没有结束即dp2 记一下每个数开始和结束的位置 #include<cstdi ...

  8. 房子里的K2 BPM业务流程管理

    房…子这件事上,尴尬实在太多. ಥ_ಥ 职场新人,租房很尴尬: 未婚男女,婚房很尴尬: 有下一代的,学区房很尴尬: 耄耋之年,养老房很尴尬... ▽ 甭管买房.租房.装修.设计,关于房子的尴尬事,三天 ...

  9. 树形动态规划 fjutoj-2131 第四集,聚集城市

    第四集,聚集城市 TimeLimit:1000MS  MemoryLimit:128MB 64-bit integer IO format:%lld   Problem Description 在小A ...

随机推荐

  1. linux新增动态库后可执行程序找不到的问题

    linux为了加快程式执行时对共享库的定位速度,避免使用搜索路径查找共享库的低效率,所以是直接读取库列表文档 /etc/ld.so.cache 从中进行搜索./etc/ld.so.cache 是个非文 ...

  2. 【SQL】from a,b。表a 和b之间是什么关系?

    1.select a.id from a,b……——>这里a和b用逗号隔开,a,b之间默认是inner join的关系.

  3. nginx做正向代理

    #代理服务器设置 server { resolver 8.8.8.8; resolver 114.114.114.114; listen ; access_log /home/lin/proxy.ac ...

  4. hibernate 主键生成方式

    1)assigned主键由外部程序负责生成,无需Hibernate参与. 2)hilo通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态. 3)seqhilo与hilo 类 ...

  5. 使用DigitalOcean控制台访问Droplet(远程服务器)

    介绍 大多数用户将使用SSH,PUTTY或安装的控制面板管理他们的DigitalOcean Droplet. 但是,可能会出现阻止您使用这些方法访问Droplet的情况. 例如,更改网络或服务配置文件 ...

  6. SQL Server Management Studio最新版下载地址

    https://docs.microsoft.com/zh-cn/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server ...

  7. 2017-2018-2 20165236 实验三《Java面向对象程序设计》实验报告

    2017-2018-2 20165236 实验三<Java面向对象程序设计>实验报告 一.实验报告封面 课程:Java程序设计            班级:1652 姓名:郭金涛     ...

  8. KinectFusion测试

    谁告诉我说KinectFusion不能直接在Kinect2上直接用.今天心血来潮看了一下Kinect for Windows SDK中的头文件,发现完全可以用啊. 于是用SDK自带的Demo测试了一下 ...

  9. 配置gVim使之不自动生成备份文件

    设置 _vimrc set nobacku   1 set nobacku 或指定一个其备份的地方: set backupdir=D:/Program/ Files/Vim /tmp 1 1   1 ...

  10. sklearn.svm.LinearSVC文档学习

    https://scikit-learn.org/stable/modules/generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC 1 ...