Time Limit: 3000MS     64bit IO Format: %lld & %llu

Submit Status uDebug

  Secret agent Maria was sent to Algorithms City to carry out an especially dangerous mission. After several thrilling events we find her in the first station of Algorithms City Metro, examining the time table. The Algorithms City Metro consists of a single line with trains running both ways, so its time table is not complicated.

  Maria has an appointment with a local spy at the last station of Algorithms City Metro. Maria knows that a powerful organization is after her. She also knows that while waiting at a station, she is at great risk of being caught. To hide in a running train is much safer, so she decides to stay in running trains as much as possible, even if this means traveling backward and forward. Maria needs to know a schedule with minimal waiting time at the stations that gets her to the last station in time for her appointment. You must write a program that finds the total waiting time in a best schedule for Maria.

The Algorithms City Metro system has N stations, consecutively numbered from 1 to N. Trains move in both directions: from the first station to the last station and from the last station back to the first station. The time required for a train to travel between two consecutive stations is fixed since all trains move at the same speed. Trains make a very short stop at each station, which you can ignore for simplicity. Since she is a very fast agent, Maria can always change trains at a station even if the trains involved stop in that station at the same time.

Input

The input file contains several test cases. Each test case consists of seven lines with information as follows.

Line 1. The integer N (2 ≤ N ≤ 50), which is the number of stations.

Line 2. The integer T (0 ≤ T ≤ 200), which is the time of the appointment.

Line 3. N − 1 integers: t1, t2, . . . , tN−1 (1 ≤ ti ≤ 20), representing the travel times for the trains between two consecutive stations: t1 represents the travel time between the first two stations, t2 the time between the second and the third station, and so on.

Line 4. The integer M1 (1 ≤ M1 ≤ 50), representing the number of trains departing from the first station.

Line 5. M1 integers: d1, d2, . . . , dM1 (0 ≤ di ≤ 250 and di < di+1), representing the times at which trains depart from the first station.

Line 6. The integer M2 (1 ≤ M2 ≤ 50), representing the number of trains departing from the N-th station.

Line 7. M2 integers: e1, e2, . . . , eM2 (0 ≤ ei ≤ 250 and ei < ei+1) representing the times at which trains depart from the N-th station.

The last case is followed by a line containing a single zero.

Output

For each test case, print a line containing the case number (starting with 1) and an integer representing the total waiting time in the stations for a best schedule, or the word ‘impossible’ in case Maria is unable to make the appointment. Use the format of the sample output.

Sample Input

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

Sample Output

Case Number 1: 5

Case Number 2: 0

Case Number 3: impossible

——————————————————我是分割线————————————————————

DP水题。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cmath>
  5. #include<algorithm>
  6. #include<queue>
  7. #include<cstdlib>
  8. #include<iomanip>
  9. #include<cassert>
  10. #include<climits>
  11. #include<functional>
  12. #include<bitset>
  13. #include<vector>
  14. #include<list>
  15. #define maxn 51
  16. #define F(i,j,k) for(int i=j;i<=k;i++)
  17. #define M(a,b) memset(a,b,sizeof(a))
  18. #define FF(i,j,k) for(int i=j;i>=k;i--)
  19. #define inf 0x7fffffff
  20. #define maxm 1001
  21. #define mod 998244353
  22. //#define LOCAL
  23. using namespace std;
  24. int read(){
  25. int x=,f=;char ch=getchar();
  26. while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
  27. while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
  28. return x*f;
  29. }
  30. int dp[][];
  31. int t_use[];
  32. vector<int> go[][];
  33. int main()
  34. {
  35. int n,T,icase=,times;
  36. while ((cin>>n)&&n) {
  37. cin>>T;
  38. int m1,m2;
  39. for (int i=;i<=n-;++i) cin>>t_use[i];
  40. for (int i=;i<=T;++i)
  41. for (int j=;j<=n;++j)
  42. go[i][j].clear();
  43. cin>>m1;
  44. for (int i=;i<=m1;++i) {
  45. cin>>times;
  46. int t=times;
  47. if(t>T) continue;
  48. go[t][].push_back(i);
  49. for (int j=;j<=n-;++j) {
  50. t+=t_use[j];
  51. if (t>T) break;
  52. go[t][j+].push_back(i);
  53. }
  54. }
  55. cin>>m2;
  56. for (int i=;i<=m2;++i) {
  57. cin>>times;
  58. int t=times;
  59. if (t>T) continue;
  60. go[t][n].push_back(i+m1);
  61. for (int j=n-;j>=;--j) {
  62. t+=t_use[j];
  63. if(t>T) break;
  64. go[t][j].push_back(i+m1);
  65. }
  66. }
  67. for (int i=;i<=T;++i)
  68. for (int j=;j<=n;++j)
  69. dp[i][j]=inf;
  70. dp[][]=;
  71. for (int i=;i<T;++i) {
  72. for (int j=;j<=n;++j) {
  73. if (dp[i][j]==inf) continue;
  74. int size=go[i][j].size();
  75. dp[i+][j]=min(dp[i+][j],dp[i][j]+);
  76. for (int k=;k<size;++k) {
  77. int u=go[i][j][k];
  78. if (u<=m1&&j<n) {
  79. if (i+t_use[j]<=T) {
  80. dp[i+t_use[j]][j+]=min(dp[i+t_use[j]][j+],dp[i][j]);
  81. }
  82. }
  83. else if (j>&&u>m1) {
  84. if (i+t_use[j-]<=T) {
  85. dp[i+t_use[j-]][j-]=min(dp[i+t_use[j-]][j-], dp[i][j]);
  86. }
  87. }
  88. }
  89. }
  90. }
  91. int ans=inf;
  92. for (int i=;i<=T;++i) {
  93. if (dp[i][n]==inf) continue;
  94. ans=min(ans,dp[i][n]+T-i);
  95. }
  96. if (ans==inf) {
  97. cout<<"Case Number "<<icase++<<": impossible"<<endl;
  98. }
  99. else {
  100. cout<<"Case Number "<<icase++<<": "<<ans<<endl;
  101. }
  102. }
  103. return ;
  104. }
  105. /*
  106. 4
  107. 55
  108. 5 10 15
  109. 4
  110. 0 5 10 20
  111. 4
  112. 0 5 10 15
  113. 4
  114. 18
  115. 1 2 3
  116. 5
  117. 0 3 6 10 12
  118. 6
  119. 0 3 5 7 12 15
  120. 2
  121. 30
  122. 20
  123. 1
  124. 20
  125. 7
  126. 1 3 5 7 11 13 17
  127. 0
  128. */

uva 1025

uva 1025 A Spy in the Metro 解题报告的更多相关文章

  1. UVA - 1025 A Spy in the Metro[DP DAG]

    UVA - 1025 A Spy in the Metro Secret agent Maria was sent to Algorithms City to carry out an especia ...

  2. UVA 1025 -- A Spy in the Metro (DP)

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

  3. UVa 1025 A Spy in the Metro(动态规划)

    传送门 Description Secret agent Maria was sent to Algorithms City to carry out an especially dangerous ...

  4. UVA 1025 A Spy in the Metro 【DAG上DP/逆推/三维标记数组+二维状态数组】

    Secret agent Maria was sent to Algorithms City to carry out an especially dangerous mission. After s ...

  5. uva 1025 A Spy int the Metro

    https://vjudge.net/problem/UVA-1025 看见spy忍俊不禁的想起省赛时不知道spy啥意思 ( >_< f[i][j]表示i时刻处于j站所需的最少等待时间,有 ...

  6. UVa 1025 A Spy in the Metro

    http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=35913 预处理出每个时间.每个车站是否有火车 为了方便判断是否可行,倒推处理 ...

  7. DAG的动态规划 (UVA 1025 A Spy in the Metro)

    第一遍,刘汝佳提示+题解:回头再看!!! POINT: dp[time][sta]; 在time时刻在车站sta还需要最少等待多长时间: 终点的状态很确定必然是的 dp[T][N] = 0 ---即在 ...

  8. World Finals 2003 UVA - 1025 A Spy in the Metro(动态规划)

    分析:时间是一个天然的序,这个题目中应该决策的只有时间和车站,使用dp[i][j]表示到达i时间,j车站在地上已经等待的最小时间,决策方式有三种,第一种:等待一秒钟转移到dp[i+1][j]的状态,代 ...

  9. UVa 1025 A Spy in the Metro (DP动态规划)

    题意:一个间谍要从第一个车站到第n个车站去会见另一个,在是期间有n个车站,有来回的车站,让你在时间T内时到达n,并且等车时间最短, 也就是尽量多坐车,最后输出最少等待时间. 析:这个挺复杂,首先时间是 ...

随机推荐

  1. LoadRunner中文乱码问题解决方法

    LoadRunner中文乱码问题解决方法 前段时间在录制,增强,整合LoadRunner脚本,期间两次遇到了中文乱码问题.在此记录一下中文乱码问题的解决办法. 一.录制回放中文乱码 我录制登陆的脚本, ...

  2. oracle数据库的安装

    ---create group groupadd oinstallgroupadd dbagroupadd oper ------create user useradd -g oinstall -G ...

  3. java8的几种常用用法

    1. 如果接口的返回值有可能是null,请用Optional封装 public Optional<User> getUser() { return Optional.ofNullable( ...

  4. Scala入门1(单例对象和伴生类)

    一.Hello World程序的执行原理 参考http://blog.csdn.net/zhangjg_blog/article/details/22760957 object HelloWorld{ ...

  5. Mysql远程连接报错:SQL Error (1130): Host '192.168.61.128' is not allowed to connect to this MySQL server

    Mysql远程连接报错:SQL Error (1130): Host '192.168.0.18' is not allowed to connect to this MySQL server     ...

  6. Pytho并发编程-利用协程实现简单爬虫

    from gevent import monkey;monkey.patch_all() import gevent from urllib.request import urlopen def ge ...

  7. POJ 3155 Hard Life 最大密度子图 最大权闭合图 网络流 二分

    http://poj.org/problem?id=3155 最大密度子图和最大权闭合图性质很相近(大概可以这么说吧),一个是取最多的边一个是取最多有正贡献的点,而且都是有选一种必须选另一种的限制,一 ...

  8. SPOJ QTREE

    QTREE /* 题目大意:维护一棵树,允许修改边权以及查询链上最大值 题解:我们将边权转为点权,标记在深度较深的点上,树链剖分后用线段树处理即可 */ #include <cstdio> ...

  9. 【贪心】【后缀自动机】Gym - 101466E - Text Editor

    题意:给你两个串A,B,以及一个整数K,让你找到B的一个尽可能长的前缀,使得其在A串中出现的次数不小于K次. 对A串建立后缀自动机,然后把B串放在上面跑,由于每到一个结点,该结点endpos集合的大小 ...

  10. C# 推送模板

    C#推送模板.安卓个推.消息推送 http://docs.getui.com/server/csharp/template/