https://www.luogu.org/problem/show?pid=2583

设在时刻i,车站j到结束最短需要等待f(i,j)分钟,得状态转移方程:

f(i,j)=min{
     f(i+1,j)+1
     f(i+t[j-1],j-1) (若时刻i有向左走的车)
     f(i+t[j],j+1) (若时刻i有向右走的车)
}
因此需要预处理每一时刻有没有车可以坐。

初始值f(t,n)=0,其他均为∞。

 #include <iostream>
#include <cstring>
#define maxt 210
#define maxn 60
#define inf 1000
using namespace std;
bool has_train[maxt][maxn][];
int dp[maxt][maxn];
int n, tt, t[maxn], m1, m2, d;
int main()
{
int cnt = ;
while (true)
{
cin >> n;
if (n == ) break;
cin >> tt;
for (int i = ; i<n; i++) cin >> t[i]; //预处理has_train数组
memset(has_train, false, maxt * maxn * );
cin >> m1;
while (m1--)
{
cin >> d;
for (int j = ; j <= n - && d <= tt; j++)
{
has_train[d][j][] = true;
d += t[j];
}
}
cin >> m2;
while (m2--)
{
cin >> d;
for (int j = n; j >= && d <= tt; j--)
{
has_train[d][j][] = true;
d += t[j - ];
}
} //初始化dp数组
for (int i = ; i <= n; i++)
dp[tt][i] = inf;
dp[tt][n] = ; for (int i = tt - ; i >= ; i--)
{
for (int j = ; j <= n; j++)
{
dp[i][j] = dp[i + ][j] + ; //+1s
if (i + t[j] <= tt && j + <= n && has_train[i][j][])
dp[i][j] = min(dp[i][j], dp[i + t[j]][j + ]); //向右走
if (i + t[j - ] <= tt && j - >= && has_train[i][j][])
dp[i][j] = min(dp[i][j], dp[i + t[j - ]][j - ]); //向左走
}
}
if (dp[][]<inf)
cout << "Case Number " << cnt << ": " << dp[][] << endl;
else
cout << "Case Number " << cnt << ": impossible" << endl;
cnt++;
}
return ;
}

【luogu2583】地铁间谍的更多相关文章

  1. 洛谷2583 地铁间谍 (UVa1025A Spy in the Metro)

    洛谷2583 地铁间谍(UVa1025A Spy in the Metro) 本题地址:http://www.luogu.org/problem/show?pid=2583 题目描述 特工玛利亚被送到 ...

  2. 洛谷P2583 地铁间谍

    P2583 地铁间谍 题目描述 特工玛利亚被送到S市执行一个特别危险的任务.她需要利用地铁完成他的任务,S市的地铁只有一条线路运行,所以并不复杂. 玛利亚有一个任务,现在的时间为0,她要从第一个站出发 ...

  3. 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 ...

  4. 地铁间谍 洛谷 p2583

    题目描述 特工玛利亚被送到S市执行一个特别危险的任务.她需要利用地铁完成他的任务,S市的地铁只有一条线路运行,所以并不复杂. 玛利亚有一个任务,现在的时间为0,她要从第一个站出发,并在最后一站的间谍碰 ...

  5. uva 1025,城市的间谍

    题目链接:https://uva.onlinejudge.org/external/10/1025.pdf 题意: 地铁是线性的,有n个站,编号(1~n),M1辆从左至右的车,和M2辆从右至左的车,发 ...

  6. 城市里的间谍B901

    城市里的间谍   城市里的间谍 难度级别:C: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 某城市的地铁是线性的,有 n(2 <= n ...

  7. 9-1 A Spy in the Metro uva1025 城市里的间谍 (DP)

    非常有价值的dp题目  也是我做的第一题dp    真的效率好高 题意:某城市的地铁是线性的 有n个车站 从左到右编号为1-n  有m1辆列车从第一站开始往右开 还有m2辆列车从第n站开始往左开  在 ...

  8. 基于ionic+angulajs的混合开发实现地铁APP

    基于ionic+angulajs的混合开发实现地铁APP 注:本博文为博主原创,转载时请注明出处. 项目源码地址:https://github.com/zhangxy1035/SubwayMap 一. ...

  9. Python写地铁的到站的原理简易版

    Python地铁的到站流程及原理(个人理解) 今天坐地铁看着站牌就莫名的想如果用Python写其工作原理 是不是很简单就小试牛刀了下大佬们勿喷纯属小弟个人理解 首先来看看地铁上显示的站牌如下: 就想这 ...

随机推荐

  1. Ubuntu下比较通用的makefile实例

    本文转自http://blog.chinaunix.net/uid-20608849-id-360294.html  笔者在写程序的时候会遇到这样的烦恼:一个项目中可能会有很多个应用程序,而新建一个应 ...

  2. Problem X

    Problem Description Recently, iSea went to an ancient country. For such a long time, it was the most ...

  3. 不怕你配置不对,就怕你看的资料不对!MIM 与 SharePoint 同步完全配置指南。

    为了更好的同步 User Profile,在 SharePoint 2010 中首次引入了 FIM (ForeFront Identity Manager) 用于编辑 User Profile 的同期 ...

  4. L2-2. 链表去重

    L2-2. 链表去重 时间限制300 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者陈越给定一个带整数键值的单链表L,本题要求你编写程序,删除那些键值的绝对值有重复的 ...

  5. CentOS恢复root口令方法

    CentOS6和CentOS7恢复root口令的方法有很大不同 CentOS6: 在引导菜单倒计时界面按任意键,进入grub引导菜单 按e键进入内核引导参数编辑界面 选中kernel项,按e键编辑引导 ...

  6. Red Hat 7.0 DNS服务配置笔记

    先挂载镜像,然后配置yum,然后安装yum install -y bind 配置静态 IP.DNS就是他本身的IP地址. 修改DNS的配置文件,在后面加入区域配置信息.vim /etc/named.c ...

  7. linux-mkdir

    mkdir mkdir : 可以用来创建目录,如果不加创建路径即在本路径下创建一个新的指定的目录,否则即在给出的路径下创建目录. 目录创建:目录名尽量见名知意,根据不同需要分层创建,尽量避免在同一目录 ...

  8. Mac Os系统设置

    显示Mac隐藏文件的命令: defaults write com.apple.finder AppleShowAllFiles -bool true 隐藏Mac隐藏文件的命令:defaults wri ...

  9. js的call() ,apply() 两种方法的区别和用法,最白话文的解释,让枯燥滚粗!

    百度了一圈calll()函数和apply()函数,感觉还是糊里糊涂 正好我前几天刚又重新翻了一遍 那本 600多页 的圣经书,我习惯时不时的去打下基础,只是为了用来装逼,给人讲解....(我是有多蛋疼 ...

  10. 怎样在一个HTML中嵌入另一个HTML页面(iframe标签用法)

    iframe 怎么 在一个网页中嵌入另一个网页呢,我们可以用html中的iframe标签搞定. iframe支持所有浏览器.下面来看语法: <iframe src="规定在 ifram ...