A Spy in the Metro(UVA 1025 ACM/ICPC World Finals2003)
---恢复内容开始---
题意:有n(2<=n<=50)个车站,从左到右编号为1~n,有M1辆列车从第1站向右开,还有M2辆列车从第N站向左开。在时刻0,间谍从第1站出发,目的是在时刻T(0<=T<=200)会见在车站n的一个间谍。在车站等候容易被抓,所以需要尽量躲在火车上,使在车站等待的时间尽量的少,列车靠站时间忽略不计,即使2站方向相反列车在同一时间靠站,间谍也能完成换乘。
题解:由于时间有序,所以可以通过判断在时刻t,在车站i 最少需要等候多少时间进行DP。由于输入较2复杂,所以可以用has_train数组表示在时刻t,车站i是否有向左或者向右的火车。具体细节可见代码。
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std; const int maxn = + ;
const int maxt = + ;
const int INF = ;
int t[maxn],has_train[maxt][maxn][],dp[maxt][maxn]; int main(){
int n,T,m1,m2,kase=;
while(~scanf("%d",&n)&&n){
scanf("%d",&T);
for(int i=;i<n;i++){
scanf("%d",&t[i]);///i到i+1的时间
}
memset(has_train, , sizeof(has_train));
scanf("%d",&m1);int d;
for(int i=;i<m1;i++){
scanf("%d",&d);
for(int j=; j<n; j++) {///此处从1开始表示车站数
if(d<=T) has_train[d][j][] = true;///d为时间,i为车站,表示在时间d时是否有向右的车可以搭乘
d+=t[j];
}
}
scanf("%d",&m2);
for(int i=;i<m2;i++){
scanf("%d",&d);
for(int j=n-;j>;j--){
if(d<=T) has_train[d][j+][]=true;///d为时间,i为车站,表示在时间d时是否有向左的车可以搭乘
d+=t[j];
}
}
for(int i=;i<n;i++) dp[T][i]=INF;///最终点不会在第n站之外
dp[T][n]=;
for(int i=T-;i>=;i--)///逆序倒推,对于每个车站都有3个选择,等待1个单位时间,搭乘向右的车,搭乘向左的车
for(int j=;j<=n;j++){///对于每个单位时间,找出这个单位时间中在所有车站中的最优解
dp[i][j]=dp[i+][j]+;
if(j<n&&has_train[i][j][]&&i+t[j]<=T)
dp[i][j]=min(dp[i][j],dp[i+t[j]][j+]);///向右搭乘的选择比较,时间加上达到下一个车站的时间,车站向右移动
if(j>&&has_train[i][j][]&&i+t[j-]<=T)
dp[i][j]=min(dp[i][j],dp[i+t[j-]][j-]);///对3种状态进行查询,找出最优解
} printf("Case Number %d: ",++kase);
if(dp[][]>=INF) printf("impossible\n");
else
printf("%d\n",dp[][]);
}
return ;
}
A Spy in the Metro(UVA 1025 ACM/ICPC World Finals2003)的更多相关文章
- 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 ...
- uva 1025 A Spy in the Metro 解题报告
A Spy in the Metro Time Limit: 3000MS 64bit IO Format: %lld & %llu Submit Status uDebug Secr ...
- UVA 1025 -- A Spy in the Metro (DP)
UVA 1025 -- A Spy in the Metro 题意: 一个间谍要从第一个车站到第n个车站去会见另一个,在是期间有n个车站,有来回的车站,让你在时间T内时到达n,并且等车时间最短, ...
- uva A Spy in the Metro(洛谷 P2583 地铁间谍)
A Spy in the Metro Secret agent Maria was sent to Algorithms City to carry out an especially dangero ...
- 洛谷2583 地铁间谍 (UVa1025A Spy in the Metro)
洛谷2583 地铁间谍(UVa1025A Spy in the Metro) 本题地址:http://www.luogu.org/problem/show?pid=2583 题目描述 特工玛利亚被送到 ...
- UVA1025-A Spy in the Metro(动态规划)
Problem UVA1025-A Spy in the Metro Accept: 713 Submit: 6160Time Limit: 3000 mSec Problem Descriptio ...
- 铁轨(rails, ACM/ICPC CERC 1997,Uva 514)
铁轨(rails, ACM/ICPC CERC 1997,Uva 514) 题目描述 某城市有一个火车站,铁轨铺设如图所示.有n节车厢从A方向驶入车站,按进站顺序编号为1~n.你的任务是让它们按照某种 ...
- 2014嘉杰信息杯ACM/ICPC湖南程序设计邀请赛暨第六届湘潭市程序设计竞赛
比赛链接: http://202.197.224.59/OnlineJudge2/index.php/Contest/problems/contest_id/36 题目来源: 2014嘉杰信息杯ACM ...
- ACM/ICPC 之 BFS(离线)+康拓展开(TSH OJ-玩具(Toy))
祝大家新年快乐,相信在新的一年里一定有我们自己的梦! 这是一个简化的魔板问题,只需输出步骤即可. 玩具(Toy) 描述 ZC神最擅长逻辑推理,一日,他给大家讲述起自己儿时的数字玩具. 该玩具酷似魔方, ...
随机推荐
- 回声TCP服务器端/客户端
一.TCP服务端 1.TCP服务端的默认函数调用顺序 socket()创建套接字 bind()分配套接字地址 listen()等待请求连接状态 accept()允许连接 read()/write()数 ...
- 使用 NumPy 和 Matplotlib 绘制函数图
Numpy是用python进行科学计算的基本程序包. 它主要包含以下功能: ♦强大的n维数组对象 ♦复杂(广播)函数工具 ♦用于集成c/c++和Fortran代码-有用的线性代数 ♦傅里叶变换和随机数 ...
- leetcode 刷题 数组类 Two Sum
---恢复内容开始--- Two Sum Given an array of integers ,find two numbers such that they add up to a specifi ...
- nginx启用php
1. php下载https://secure.php.net/downloads.php搜索china镜像站点,从这里下载http://cn2.php.net/get/php-7.2.3.tar.gz ...
- .net core 在扩展中使用接口实例之IServiceProvider
在.net core 2.0中,我们使用的对象实例大多数都是通过构造函数依赖注入进来的,但那是在一般的类中使用. 如果需要在静态/扩展类中使用某些服务类的对象实例,可以使用如下方式: 1.新建一个Se ...
- 深入理解java虚拟机---虚拟机工具jps与jstat(十四)
jps-java process status jps类似于linux的ps命令,用于查看进程. JPS 名称: jps - Java Virtual Machine Process Status T ...
- 2.19 C++友元函数和友元类
参考: http://www.weixueyuan.net/view/6350.html 总结: 借助friend关键字将其声明为友元函数,结果,在display函数体内,我们就能访问private属 ...
- SQL-27 给出每个员工每年薪水涨幅超过5000的员工编号emp_no、薪水变更开始日期from_date以及薪水涨幅值salary_growth,并按照salary_growth逆序排列。 提示:在sqlite中获取datetime时间对应的年份函数为strftime('%Y', to_date)
题目描述 给出每个员工每年薪水涨幅超过5000的员工编号emp_no.薪水变更开始日期from_date以及薪水涨幅值salary_growth,并按照salary_growth逆序排列. 提示:在s ...
- LSTM-自然语言建模
说到自然语言,我就会想到朴素贝叶斯,贝叶斯核心就是条件概率,而且大多数自然语言处理的思想也就是条件概率. 所以我用预测一个句子出现的概率为例,阐述一下自然语言处理的思想. 处理思想-概率 句子,就是单 ...
- 用Filter实现图片防盗链
首先继承自FilterAttribute类同时实现IActionFilter接口,代码如下: //// <summary> /// 防盗链Filter. /// </summary& ...