城市里的间谍B901
城市里的间谍
城市里的间谍
难度级别:C; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B
试题描述
某城市的地铁是线性的,有 n(2 <= n <= 50)个车站,从左到右编号为 1 到 n。有 M1 辆列车从第 1 站开始往右开,还有 M2 辆列车从第 n 站开始往左开。在时刻 0,Mario 从第 1 站出发,目的是在时刻 T( 0 <= T <= 200 )会见车站 n 的一个间谍。在车站等车时容易被抓,所以她决定尽量躲开在开动的火车上,让在车站等待的总时间尽量短。列车靠站停车时间忽略不计,且 Mario 身手敏捷,即使两辆方向不同的列车在同一时间靠站,Mario也能完成换乘。
输入
第一行包含两个数,分别为 n 和 T,第二行有 n-1 个整数,分别为 T1,T2,……,Tn-1,其中 Ti 表示地铁从车站 i 到车站 i+1 行驶的时间(两个方向一样)。第三行为 m,表示从第 1 站出发向右开的列车数目,第四行有 m 个整数,D1,D2,……,Dm(严格递增序列),即各列车的出发时间。第五行和第六行描述从第 n 站出发向左开的列车,格式同第三行和第四行。
输出
有解时输出一个数,表示最少等待时间;无解时就输出impossible。
输入示例
3 185
3 1
15
2 8 16 17 28 31 38 41 75 86 91 128 151 153 171
26
1 2 11 16 31 33 47 50 51 55 56 61 66 67 82 93 94 95 108 112 114 142 145 161 171 183
输出示例
123
试题分析
首先,最容易想到的办法就是把每一站的一种情况都枚举一遍,最后取最优解,但这种情况所需要的情况复杂,而且代码效率低,在时间上和空间上都肯定会超限,所以不可取。
但是我们可以将代码优化一下,也就是用DP来解决这个问题。最后优化后的代码如下:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
int t[],d1[],d2[],dp[][];
int main(){
int n,T,m1,m2;
cin>>n>>T;
for(int i=;i<=n;i++){
cin>>t[i];
t[i]+=t[i-];
}
cin>>m1;
for(int i=;i<=m1;i++){
int x;
cin>>x;
d1[x]=;
}
cin>>m2;
for(int i=;i<=m2;i++){
int y;
cin>>y;
d2[y]=;
}
memset(dp,0x7f,sizeof(dp));
dp[][]=;
for(int i=;i<=T;i++){
for(int j=;j<=n;j++){
dp[i][j]=dp[i-][j]+;
if(j> && i>=t[j] && d1[i-t[j]])
dp[i][j]=min(dp[i][j],dp[i-(t[j]-t[j-])][j-]);
if(j<n && i>=(t[n]-t[j]) && d2[i-(t[n]-t[j])])
dp[i][j]=min(dp[i][j],dp[i-(t[j+]-t[j])][j+]);
}
}
if(dp[T][n]>)
cout<<"impossible";
else
cout<<dp[T][n];
return ;
}
/*dp[i][j]为第i秒时,间谍在第j个车站
对于每个状态,有三种决策
1.等待一秒,dp[i][j]=dp[i+1][j]+1;
2.这时车站有向右开的车,dp[i][j]=dp[[i+t[j]][j+1];
3.这时车站有向左开的车,dp[i][j]=dp[i+t[j-1]][j-1];
处理边界
城市里的间谍
你——悟到了么?
城市里的间谍B901的更多相关文章
- UVa-1025城市里的间谍 A Spy in the Metro
原题 城市里的间谍 分析 动态规划,dp[i][j]表示你在时刻i,车站j,最少还要等待的时间. 边界条件d[T][n]=0 已经到达,其他d[T][i]=inf不可达. 在一个站点时,有以下三种决策 ...
- 9-1 A Spy in the Metro uva1025 城市里的间谍 (DP)
非常有价值的dp题目 也是我做的第一题dp 真的效率好高 题意:某城市的地铁是线性的 有n个车站 从左到右编号为1-n 有m1辆列车从第一站开始往右开 还有m2辆列车从第n站开始往左开 在 ...
- UVa 1025 城市里的间谍
https://vjudge.net/problem/UVA-1025 题意:一个间谍要从第一个车站到第n个车站去会见另一个,在是期间有n个车站,有来回的车站,让你在时间T内时到达n,并且等车时间最短 ...
- UVA1025 城市里的间谍
#include<iostream> #include<cstdio> #include<memory.h> using namespace std; #defin ...
- 【动态规划】[UVA1025]A Spy in the Metro 城市里的间谍
参考:https://blog.csdn.net/NOIAu/article/details/71517440 https://blog.csdn.net/c20180630/article/deta ...
- 我不就是吃点肉,应该没事吧——爬取一座城市里的烤肉店数据(附完整Python爬虫代码)
写在前面的一点屁话: 对于肉食主义者,吃肉简直幸福感爆棚!特别是烤肉,看着一块块肉慢慢变熟,听着烤盘上"滋滋"的声响,这种期待感是任何其他食物都无法带来的.如果说甜点是" ...
- DP小合集
1.Uva1625颜色的长度 dp[i][j]表示前一个串选到第i个 后一个串选到第j个 的最小价值 记一下还有多少个没有结束即dp2 记一下每个数开始和结束的位置 #include<cstdi ...
- 房子里的K2 BPM业务流程管理
房…子这件事上,尴尬实在太多. ಥ_ಥ 职场新人,租房很尴尬: 未婚男女,婚房很尴尬: 有下一代的,学区房很尴尬: 耄耋之年,养老房很尴尬... ▽ 甭管买房.租房.装修.设计,关于房子的尴尬事,三天 ...
- 树形动态规划 fjutoj-2131 第四集,聚集城市
第四集,聚集城市 TimeLimit:1000MS MemoryLimit:128MB 64-bit integer IO format:%lld Problem Description 在小A ...
随机推荐
- CF891C Envy 最小生成树/虚树
正解:最小生成树/虚树 解题报告: 传送门! sd如我就只想到了最暴力的想法,一点儿优化都麻油想到,,,真的菜到爆炸了QAQ 然后就分别港下两个正解QAQ 法一,最小生成树 这个主要是要想到关于最小生 ...
- ubuntu14.04下开启ssh服务
1. 安装 sudo apt-get update sudo apt-get install openssh-server 2.开启服务 查看查看ssh服务是否启动 打开"终端窗口" ...
- blockdev命令 blkid命令 lsblk命令
blockdev命令 blkid命令 lsblk命令 http://www.jb51.net/LINUXjishu/310389.html block相关的命令 这篇文章主要介绍了Linux bl ...
- 前端框架之Vue(7)-事件处理
监听事件 可以用 v-on 指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码. 示例: <div id="example-1"> <butt ...
- javascript篇-console.log()打印object却显示为字符串[object object]
console.log打印对象遇到的一个问题,如下截图 打印结果与预期不符,原因是因为字符串‘a’和对象object拼接在一起,拼成了一个字符串
- vue-底部导航栏
<template> <div class="bottom"> <div class="bottom_button iconfont ico ...
- vue-router路由管理器
安装vue-router npm install vue-router 在main.js中引入 import VueRouter from 'vue-router' Vue.use(VueRouter ...
- api-gateway-engine知识点(1)
1 密钥绑定时,通过Channel 实现监控 后台发送数据 : redisTemplate.convertAndSend(RedisMessageChannel.API_GATEWA ...
- AOP 入门
1,源码 Application.java package com.bf; import org.springframework.context.ApplicationContext; import ...
- 《全栈性能Jmeter》-6JMeter元件详解