http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=35913

预处理出每个时间、每个车站是否有火车

为了方便判断是否可行,倒推处理,每次有三种决策:原地坐等一分钟、搭车向左(如果有车)、搭车向右(如果有车)

 1 /**/
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<cmath>
 5 #include<cstring>
 6 #include<algorithm>
 7 using namespace std;
 8 const int mxn=300;
 9 int n,T;
10 bool h[mxn][mxn][2];
11 int ti[mxn];
12 int m,d,e;
13 int f[mxn][mxn];
14 void clear(){
15     memset(ti,0,sizeof(ti));
16     memset(h,0,sizeof(h));
17     memset(f,111,sizeof(f));
18 }
19 int main(){
20     int cnt=0;
21     while(scanf("%d",&n) && n){
22         clear();
23         scanf("%d",&T);
24         int i,j;
25         for(i=1;i<n;i++)scanf("%d",&ti[i]);//车站距离
26         scanf("%d",&m);
27         for(i=1;i<=m;i++)
28         {
29             scanf("%d",&d);//左边发车时间
30             for(j=1;d<=T && j<=n;d+=ti[j],j++){
31                 h[d][j][0]=1;
32             }
33         }
34         scanf("%d",&m);
35         for(i=1;i<=m;i++)
36         {
37             scanf("%d",&e);//右边发车时间
38             for(j=n;e<=T && j>=1;j--,e+=ti[j]){
39                 h[e][j][1]=1;
40             }
41         }
42         //以上全是初始化
43         f[T][n]=0;
44         for(i=T-1;i>=0;i--){//倒推
45             for(j=1;j<=n;j++){
46                 f[i][j]=f[i+1][j]+1;//等待
47                 if(j<n && h[i][j][0] && i+ti[j]<=T)
48                     f[i][j]=min(f[i][j],f[i+ti[j]][j+1]);//向右
49                 if(j>1 && h[i][j][1] && i+ti[j-1]<=T)
50                     f[i][j]=min(f[i][j],f[i+ti[j-1]][j-1]);//向左
51             }
52         }
53         printf("Case Number %d: ",++cnt);
54         if(f[0][1]>=0xff) printf("impossible\n");
55         else printf("%d\n",f[0][1]);
56     }
57     return 0;
58 } 

转载于:https://www.cnblogs.com/SilverNebula/p/5574062.html

UVa 1025 A Spy in the Metro相关推荐

  1. uva 1025——A Spy in the Metro

    题意:有一个线性的车站(1-n),两个方向的车,给出列车的出发时刻和到下一站的时间,要求在到达n前换乘的等待时间最短. 思路:dp,每次有3种决策,要么等一分钟,要么往左走,要么往右,在3种决策下找到 ...

  2. UVA 1025 A Spy in the Metro DP水题

    简单DAG,每个状态有三种决策,原地傻等,上往左开的车,上往右开的车. #include <cstdio> #include <cstring> #include <io ...

  3. Uva 1025 - A Spy in the Metro(DP)

    题目链接 https://vjudge.net/problem/UVA-1025 [题意]        某城市里的地铁是线性的,有n个车站(2<=n<=50),有M1辆列车从第1站从左往 ...

  4. A Spy in the Metro UVA - 1025

    题意:某城市的地铁是线性的,有n(2<=n<=50)个车站,从左到右的编号为1~n.有M1辆车从第1站出发往右开,还有M2辆车从第n站开始往左开. 在时刻0,Mario从第1站出发,目的是 ...

  5. UVA1025 城市里的间谍 A Spy in the Metro(2003 ICPC world final)(DAG上DP)

    整理的算法模板合集: ACM模板 输入比较麻烦 因为时间是单向流逝的,所以是一个天然的"序",我们可以用一维用来循环枚举时间,我们规定 f[i][j]表示当前时刻为i,你的位置为车 ...

  6. UVA1025——A Spy in the Metro【dp】

    题目链接:https://cn.vjudge.net/problem/UVA-1025 题目大意:Mario从第1站出发,目的是在时刻T会见车站 nnn 的一个间谍.由于在车站等待容易被抓,所以应尽量 ...

  7. UVA 1025 紫书练习题 动态规划

    好吧,做例题总是这样,莫名其妙的WA,然后莫名其妙的AC... 关键的部分紫书上已经说得很清楚了,剩下的就是确定has_train这个数组,我觉得确定这个数组也不是难事吧..把数据范围看清楚,然后看看 ...

  8. UVa 1025 (DAG 上的动态规划,有固定终点的最短时间,逆推法)

    题目链接 题意:  某城市的地铁是线性的,有n(2≤n≤50)个车站,从左到右的编号为1~N.有M1辆列车从第一站开始往右开,还有M2辆列车从第n站开始往左开.在时刻0,Mario从第1站出发,目的是 ...

  9. DP(动态规划)总结

    1. 写在前面的话 之前写了一篇不像总结的动态规划总结,感觉更像是一个成长历程,所以就打算重写一篇. 2. 对DP简单的总结 dp的题目特点 求最大或者最小值(如背包:价值最大.凑硬币:数量最少--) ...

最新文章

  1. JavaScript的DOM操作-重点部分-第一部分
  2. 【S操作】轻松优雅防止(解决)两次掉进同一坑的完美解决方案
  3. Android获取存储卡路径的方式(转)
  4. 【计算机网络复习】1.1.2 标准化工作及相关组织
  5. B站、豆瓣都崩了,还有啥技术能靠得住?
  6. BZOJ 2226 [Spoj 5971] LCMSum 最大公约数之和 | 数论
  7. js获取当前页面的地址和端口_url
  8. JIRA状态为任务结束,但是解决结果为未解决相关配置
  9. Django 【第一篇】基础
  10. 对于计算机专业英语的问题,计算机专业英语的问题
  11. 机器学习种9种常用算法
  12. 内存带宽测试工具 mbw
  13. 那些年你错过的房子 1980-2017年记录: 深圳真实房价
  14. 昨天晚上看了冰川时代三
  15. centos7更换yum仓库、静态IP、SSH密钥登陆
  16. 微信小程序点击查看大图
  17. 网站等保三级怎么做?手续是怎样的?
  18. 使用Profiler进行性能分析
  19. 警惕“电子发票”邮件,多家企业中招
  20. Ardunio下的STM32串口通信

热门文章

  1. 汇编:内存地址为什么从0开始?等问题
  2. [译]使用 Rust 开发一个简单的 Web 应用,第 4 部分 —— CLI 选项解析
  3. springboot+mongodb
  4. C# JSON使用的常用技巧(一)
  5. linux安装和配置 mysql、redis 过程中遇到的问题记录(转)
  6. 跟恶意插件的较量:手工清除Orzhz广告程序
  7. 安卓 存储---SharedPreferences
  8. php调用for循环函数吗,我需要将“函数”与“for循环”结合使用php
  9. clover写入efi_2014 黑苹果折腾之clover efi全新安装
  10. mac redis 链接_在Ubunt/Mac系统安装Redis以及设置Redis密码并且允许远程连接 - Laravel学习网...