UVA_1025_A_Spy_in_the_Metro_(动态规划)
描述
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3466
某城市的地铁是线性的,有n个车站,有M1辆列车从左到右开,M2辆列车从右到左开.在0时刻,你在第一站,要在T时刻到达第n站,其间可以随意换车,要求在车站等待的时间最短.
分析
用dp[i][j]表示在i时刻,在第j站,要达到目的,需要等待多久.显然dp[T][n]=0,对于任意i!=n,dp[T][i]=INF,要求dp[0][1].那么转移方程:
dp[i][j]=1.dp[i+1][j]+1(在车站等一分钟).
2.dp[i+t[j]][j+1](如果有,乘坐向右的列车).
3.dp[i+t[j-1]][j-1](如果有,乘坐向左的列车).
#include <bits/stdc++.h>
using namespace std; const int maxn=+,maxt=+,INF=0x3fffffff;
int n,T,M1,M2,kase;
int t[maxn],dp[maxt][maxn];
bool has_train[maxt][maxn][]; void solve(){
for(int i=;i<=n;i++) dp[T][i]=INF;
dp[T][n]=;
for(int i=T-;i>=;i--)
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-]);
}
printf("Case Number %d: ",++kase);
if(dp[][]>=INF) puts("impossible");
else printf("%d\n",dp[][]);
}
void init(){
scanf("%d",&T);
for(int i=;i<n;i++){
scanf("%d",&t[i]);
}
memset(has_train,,sizeof has_train);
scanf("%d",&M1);
for(int i=;i<=M1;i++){
int d; scanf("%d",&d);
int station=;
while(d<=T&&station<n){
has_train[d][station][]=true;
d+=t[station++];
}
}
scanf("%d",&M2);
for(int i=;i<=M2;i++){
int d; scanf("%d",&d);
int station=n;
while(d<=T&&station>){
has_train[d][station][]=true;
d+=t[station-]; station--;
}
}
}
int main(){
while(scanf("%d",&n)&&n){
init();
solve();
}
return ;
}
UVA_1025_A_Spy_in_the_Metro_(动态规划)的更多相关文章
- 增强学习(三)----- MDP的动态规划解法
上一篇我们已经说到了,增强学习的目的就是求解马尔可夫决策过程(MDP)的最优策略,使其在任意初始状态下,都能获得最大的Vπ值.(本文不考虑非马尔可夫环境和不完全可观测马尔可夫决策过程(POMDP)中的 ...
- 简单动态规划-LeetCode198
题目:House Robber You are a professional robber planning to rob houses along a street. Each house has ...
- 动态规划 Dynamic Programming
March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: ...
- 动态规划之最长公共子序列(LCS)
转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...
- C#动态规划查找两个字符串最大子串
//动态规划查找两个字符串最大子串 public static string lcs(string word1, string word2) { ...
- C#递归、动态规划计算斐波那契数列
//递归 public static long recurFib(int num) { if (num < 2) ...
- 动态规划求最长公共子序列(Longest Common Subsequence, LCS)
1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...
- 【BZOJ1700】[Usaco2007 Jan]Problem Solving 解题 动态规划
[BZOJ1700][Usaco2007 Jan]Problem Solving 解题 Description 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目. 精确地 ...
- POJ 1163 The Triangle(简单动态规划)
http://poj.org/problem?id=1163 The Triangle Time Limit: 1000MS Memory Limit: 10000K Total Submissi ...
随机推荐
- 解决OOM小记
跟猜想的一样是OOM.一回来遇一不怎么熟悉的sb,给我气的....算了.....哥哥也是种种原因回的合肥.继续看问题. 这个地方的界面是这样的 划红线的地方是三个LinearLayout,每次oncl ...
- win向linux传文件
使用pscp.exe即可. 下载pscp.exe(http://pan.baidu.com/s/1jG6zmx4) 复制到windows/system32目录下即可. 然后可在cmd命令行下使用psc ...
- Java输出日历
源码链接:http://pan.baidu.com/s/1o6xeybK
- 在Eclipse的DDMS中查看手机data文件夹中的内容
在模拟器状态下,在Eclipse的DDMS中的File Explorer下查看手机data/data中的内容是件非常轻松的事情,特别是查看databases 但是在真机模式下就全然不是那么一回事了,在 ...
- apparmor介绍
AppArmor AppArmor 类似于selinux ,主要的作用是设置某个可执行程序的访问控制权限,主要区别就在于apparmor是以路径(path)为基础,而selinux以i节点(inode ...
- 转载:为什么Linux不需要磁盘碎片整理
转载自:www.aqee.net 如果你是个Linux用户,你可能听说过不需要去对你的linux文件系统进行磁盘碎片整理.也许你注意到了,在Liunx安装发布包里没有磁盘碎片整理的工具.为什么会这样? ...
- AVAudioSession 的 AVAudioSessionCategory 和 AVAudioSessionCategoryOptions 相关
AVAudioSessionCategory相关 AVAudioSessionCategoryAmbient 使用这个category的应用会随着静音键和屏幕关闭而静音.并且不会中止其它应用播放声音, ...
- iOS开发——UIWebView
(已写好代码,待空闲更新……)
- Library string type(2)——关于String的操作
关于string的定义,请参阅博文http://blog.csdn.net/larry233/article/details/51483827 string的操作 s.empty() //Return ...
- (转)IOS开发之——绘图(CGContext)
周刊 更多 登录 IOS开发之——绘图(CGContext) 时间 2014-04-21 09:17:43 CSDN博客 原文 http://blog.csdn.net/zhenyu521131 ...