A Spy in the Metro UVA - 1025
题意:某城市的地铁是线性的,有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相关推荐
- UVa 1025 A Spy in the Metro
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=35913 预处理出每个时间.每个车站是否有火车 为了方便判断是否可行,倒推处理 ...
- uva 1025——A Spy in the Metro
题意:有一个线性的车站(1-n),两个方向的车,给出列车的出发时刻和到下一站的时间,要求在到达n前换乘的等待时间最短. 思路:dp,每次有3种决策,要么等一分钟,要么往左走,要么往右,在3种决策下找到 ...
- UVA 1025 A Spy in the Metro DP水题
简单DAG,每个状态有三种决策,原地傻等,上往左开的车,上往右开的车. #include <cstdio> #include <cstring> #include <io ...
- Uva 1025 - A Spy in the Metro(DP)
题目链接 https://vjudge.net/problem/UVA-1025 [题意] 某城市里的地铁是线性的,有n个车站(2<=n<=50),有M1辆列车从第1站从左往 ...
- UVA1025 城市里的间谍 A Spy in the Metro(2003 ICPC world final)(DAG上DP)
整理的算法模板合集: ACM模板 输入比较麻烦 因为时间是单向流逝的,所以是一个天然的"序",我们可以用一维用来循环枚举时间,我们规定 f[i][j]表示当前时刻为i,你的位置为车 ...
- UVA1025——A Spy in the Metro【dp】
题目链接:https://cn.vjudge.net/problem/UVA-1025 题目大意:Mario从第1站出发,目的是在时刻T会见车站 nnn 的一个间谍.由于在车站等待容易被抓,所以应尽量 ...
- UVA 1025 紫书练习题 动态规划
好吧,做例题总是这样,莫名其妙的WA,然后莫名其妙的AC... 关键的部分紫书上已经说得很清楚了,剩下的就是确定has_train这个数组,我觉得确定这个数组也不是难事吧..把数据范围看清楚,然后看看 ...
- UVa 1025 (DAG 上的动态规划,有固定终点的最短时间,逆推法)
题目链接 题意: 某城市的地铁是线性的,有n(2≤n≤50)个车站,从左到右的编号为1~N.有M1辆列车从第一站开始往右开,还有M2辆列车从第n站开始往左开.在时刻0,Mario从第1站出发,目的是 ...
- 紫书《算法竞赛入门经典》
紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...
最新文章
- 皮一皮:是亲爹的操作 ,没错...
- 【BZOJ4873】[六省联考2017]寿司餐厅(网络流)
- (三十一)java版spring cloud+spring boot+redis多租户社交电子商务平台-spring-cloud-config...
- 《机器学习》 周志华学习笔记第七章 贝叶斯分类器(课后习题)python 实现
- 计算机有新的更新,现在是2018年,我的电脑最近总是弹出说有重要更新,提示自2017年5月9日后,microsoft - Microsoft Community...
- mongodb默认的用户名密码_Windows下MongoDB设置用户、密码
- 如何让你的 Git 历史保持“干净”?!
- JS 获取元素当前的样式信息
- 轻松了解Spring中的控制反转和依赖注入(一) --[转]http://www.cnblogs.com/xxzhuang/p/5948902.html...
- 210.课程表II(力扣leetcode) 博主可答疑该问题
- PMP、软考高项考后总结
- php curl 417,PHP Curl 417 Expectation Failed解决办法
- Codecademy-中文JavaScript系列教程-初认JS
- c语言程序总是停止运行,为什么程序老是停止工作
- C++学习笔记之数字输入及错误处理
- 如何理解那些令人困惑的Windows 7文件/共享权限
- 苹果手机计算机按键会想关掉哪里,苹果手机,你不知道的隐藏功能
- 前端学习——这十本书一定要看
- Jaeger知识点补充
- 靠智慧教育“飞升”,科大讯飞前路漫漫
热门文章
- [wordpress]更新插件时,免去FTP操作
- 使用tr1的bind函数模板
- vSphereClient向ESXi主机分配许可证
- 【第二组】项目冲刺(Alpha版本)第三次每日例会 2017/7/13
- PHP - declare tick
- 通过标准的 ASP.NET 控件来使用 jQuery UI
- MySQL字符集LATIN1转UTF8
- linux的ftp停不下来了,FTP上传时经常中断,怎么办? 在Linux终端中使用ftp时总是出现connection refuse......
- 怎么用到自动化办公中_房型太小没有办公区怎么办?客厅中的1㎡就能搞定
- python pip下载安装教程_python详细安装pip教程