题意:

有线性的n个车站,从左到右编号分别为1~n。有M1辆车从第一站开始向右开,有M2辆车从第二站开始向左开。在0时刻主人公从第1站出发,要在T时刻回见车站n 的一个间谍(忽略主人公的换乘时间)。输出最少的等待时间,如果无解输出impossible。

分析:

d(i, j)表示第i时刻在第j个车站,最少还需要的等待时间。边界是:d(T, n) = 0, d(T, i) = +∞

预处理:

has_train[t][i][0]数组是用来记录t时刻第i个车站是否有向右开的车,类似has_train[t][i][1]记录的是向左开的车。

有3种决策:

  1. 等一分钟
  2. 搭乘向左开的车(如果有的话)
  3. 搭乘向右开的车(如果有的话)

边界没有处理到位,WA了好多次。

 //#define LOCAL
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; const int INF = ;
int has_train[][][], t[], dp[][]; int main(void)
{
#ifdef LOCAL
freopen("1025in.txt", "r", stdin);
#endif int kase = , n, T;
while(scanf("%d", &n) == && n)
{
scanf("%d", &T);
for(int i = ; i < n; ++i) dp[T][i] = INF;
dp[T][n] = ;
memset(has_train, , sizeof(has_train)); for(int i = ; i < n; ++i) scanf("%d", &t[i]);
int m, ti;
scanf("%d", &m);
while(m--)
{
scanf("%d", &ti);
for(int i = ; i < n; ++i)
{
if(ti <= T) has_train[ti][i][] = ;
ti += t[i];
}
}
scanf("%d", &m);
while(m--)
{
scanf("%d", &ti);
for(int j = n-; j >= ; --j)
{
if(ti <= T) has_train[ti][j + ][] = ;
ti += t[j];
}
} 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[][]);
} return ;
}

代码君

最新文章

  1. GIT使用笔记-fatal:multiple stage entries for merged file处理办法
  2. ucos中的三种临界区管理机制
  3. 滴滴快车,安全把你带到凡科安全知识h5大赛
  4. Ingress 记萌新的第一次连多重(xjbl)
  5. Dom学习笔记
  6. Linux[Fedora]查找文件包含的字段
  7. [转]B树、B-树、B+树、B*树
  8. c# XML序列化与反序列化
  9. p364习题1
  10. 矩阵(matrix)
  11. JNI 系统钩子
  12. Mysql的列索引和多列索引(联合索引)
  13. Zookeeper简介与安装
  14. Oracle EBS-SQL (BOM-1):检查供应类型错误.sql
  15. iOS经常使用加密方式(MD5,AES,BASE64)与网络数据安全
  16. sharepoint:各种阀值
  17. Ubuntu发行版升级
  18. P2P系统,一致性哈希和DHT
  19. C# Json字符串保存信息
  20. vue开发记录--element-ui的form表单label和placeholder国际化遇到的小问题

热门文章

  1. 修复jquery.treeview的增加子节点的方法的bug
  2. OpenCV之mixChannels()函数使用说明
  3. 为什么使用long声明和double声明得到的结果不一样呢?
  4. Codeforces Bubble Cup 8 - Finals [Online Mirror] B. Bribes lca
  5. spoj 375 Query on a tree(树链剖分,线段树)
  6. Ajax出入江湖
  7. uva 10106
  8. java 页面换行处理
  9. Oracle 学习笔记(三)
  10. 李洪强iOS开发之OC[015]#pragma mark的使用