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

在时刻0,Mario从第1站出发,目的是在时刻T(0<=T<=200)会见车站n的一个间谍。在车站等车时容易被抓,所以她决定躲在开动的火车上,让在

车站等待的总时间尽量短。列车靠站停车时间忽略不计,且Mario身手敏捷,即使两辆方向不同的列车在同一时间靠站,Mario也能完成换乘。

题解:时间是单向流逝的,是一个天然的序。影响到决策的只有当前时间和所处的车站,所以可以用d(i,j)表示时刻 i ,你在车站 j ,最少还需要等

待多长时间。边界条件d(T,n)=0,其他d(T,j)(j 不等于n)为正无穷。有如下三种决策:

  (1)等一分钟。

  (2)搭乘往右开的车(如果有)

  (3)搭乘往左开的车(如果有)

NOTE:以上摘自《算法竞赛入门经典》

读完这个题的时候大脑一片混乱,不知从那下手,更不用说如何定义状态。个人总结,有时DP得逆着推,比如数字三角形,单向TSP等等。这道题也

是,还有就是注意控制边界条件啊,初始化啊。路漫漫其修远兮!

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 #define INF 1e8
 6 using namespace std;
 7
 8 int n,T,kase;
 9 int dp[205][55],t[55];
10 bool train[205][55][2];
11
12 void read(){
13     cin>>T;
14     for(int i=1;i<n;i++) cin>>t[i];
15
16     int x;cin>>x;
17     for(int i=0;i<x;i++){
18         int y;cin>>y;
19         train[y][1][0]=true;
20         int sum=0;
21         for(int j=1;j<n;j++){
22             sum=sum+t[j];
23             if(y+sum<=T) train[y+sum][j+1][0]=true;
24         }
25     }
26
27     cin>>x;
28     for(int i=0;i<x;i++){
29         int y;cin>>y;
30         train[y][n][1]=true;
31         int sum=0;
32         for(int j=n-1;j>0;j--){
33             sum=sum+t[j];
34             if(y+sum<=T) train[y+sum][j][1]=true;
35         }
36     }
37 }
38
39 void solve(){
40     for(int i=1;i<n;i++) dp[T][i]=INF;
41     dp[T][n]=0;
42     for(int i=T-1;i>=0;i--){
43         for(int j=1;j<=n;j++){
44             dp[i][j]=dp[i+1][j]+1;
45             if(j<n&&train[i][j][0]&&i+t[j]<=T) dp[i][j]=min(dp[i][j],dp[i+t[j]][j+1]);
46             if(j>1&&train[i][j][1]&&i+t[j-1]<=T) dp[i][j]=min(dp[i][j],dp[i+t[j-1]][j-1]);
47         }
48     }
49
50     cout<<"Case Number "<<++kase<<": ";
51     if(dp[0][1]>=INF) cout<<"impossible\n";
52     else cout<<dp[0][1]<<"\n";
53 }
54 int main()
55 {   kase=0;
56     while(cin>>n&&n){
57         memset(train,false,sizeof(train));
58         read();
59         solve();
60     }
61     return 0;
62 }

转载于:https://www.cnblogs.com/zgglj-com/p/7296545.html

A Spy in the Metro UVA - 1025相关推荐

  1. UVa 1025 A Spy in the Metro

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

  2. uva 1025——A Spy in the Metro

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

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

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

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

    题目链接 https://vjudge.net/problem/UVA-1025 [题意]        某城市里的地铁是线性的,有n个车站(2<=n<=50),有M1辆列车从第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. 紫书《算法竞赛入门经典》

    紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...

最新文章

  1. 皮一皮:是亲爹的操作 ,没错...
  2. 【BZOJ4873】[六省联考2017]寿司餐厅(网络流)
  3. (三十一)java版spring cloud+spring boot+redis多租户社交电子商务平台-spring-cloud-config...
  4. 《机器学习》 周志华学习笔记第七章 贝叶斯分类器(课后习题)python 实现
  5. 计算机有新的更新,现在是2018年,我的电脑最近总是弹出说有重要更新,提示自2017年5月9日后,microsoft - Microsoft Community...
  6. mongodb默认的用户名密码_Windows下MongoDB设置用户、密码
  7. 如何让你的 Git 历史保持“干净”?!
  8. JS 获取元素当前的样式信息
  9. 轻松了解Spring中的控制反转和依赖注入(一) --[转]http://www.cnblogs.com/xxzhuang/p/5948902.html...
  10. 210.课程表II(力扣leetcode) 博主可答疑该问题
  11. PMP、软考高项考后总结
  12. php curl 417,PHP Curl 417 Expectation Failed解决办法
  13. Codecademy-中文JavaScript系列教程-初认JS
  14. c语言程序总是停止运行,为什么程序老是停止工作
  15. C++学习笔记之数字输入及错误处理
  16. 如何理解那些令人困惑的Windows 7文件/共享权限
  17. 苹果手机计算机按键会想关掉哪里,苹果手机,你不知道的隐藏功能
  18. 前端学习——这十本书一定要看
  19. Jaeger知识点补充
  20. 靠智慧教育“飞升”,科大讯飞前路漫漫

热门文章

  1. [wordpress]更新插件时,免去FTP操作
  2. 使用tr1的bind函数模板
  3. vSphereClient向ESXi主机分配许可证
  4. 【第二组】项目冲刺(Alpha版本)第三次每日例会 2017/7/13
  5. PHP - declare tick
  6. 通过标准的 ASP.NET 控件来使用 jQuery UI
  7. MySQL字符集LATIN1转UTF8
  8. linux的ftp停不下来了,FTP上传时经常中断,怎么办? 在Linux终端中使用ftp时总是出现connection refuse......
  9. 怎么用到自动化办公中_房型太小没有办公区怎么办?客厅中的1㎡就能搞定
  10. python pip下载安装教程_python详细安装pip教程