Example-09-01
2016-08-12 11:03
232 查看
#define _CRT_SECURE_NO_WARNINGS #include <cstdio> #include <cstring> int min(int a, int b) { if (a < b) return a; else return b; } int main() { int N; // 2 <= N <= 50 int t[55]; int T; // 0 <= T <= 200 int M1, M2; // 1 <= M1, M2 <= 50 int d[55], e[55]; int have_train[205][55][2]; // [time][station][direction] // time <= 200 // sation <= 50 // direction == 0 left, == 1 right int kase = 1; while (scanf("%d", &N) && N) { scanf("%d", &T); for (int i = 1; i < N; i++) scanf("%d", &t[i]); // t[i] is the time between station i and station i+1 memset(have_train, 0, sizeof(have_train)); scanf("%d", &M1); for (int i = 0; i < M1; i++){ // for each train int start; scanf("%d", &start); have_train[start][1][0] = 1; // station 1 for (int j = 1; j < N; j++) { // station 2, 3, 4..., N; j+1 is the station number // start + t[j] is the time the train arrives at station j+1, also is start time + time from station 1 to station j+1 // t[j] is the time between station j and station j+1 if (start + t[j] <= T) { have_train[start + t[j]][j + 1][0] = 1; } start += t[j]; } } scanf("%d", &M2); for (int i = 0; i < M2; i++){ // for each train int start; scanf("%d", &start); have_train[start] [1] = 1; // station N for (int j = N-1; j >= 1; j--) { // station N-1, N-2, ..., 1; j is the station number // start + t[j] is the time the train arrives at station j, also is start time + time from station N to station j // t[j] is the time between station j and station j+1 if (start + t[j] <= T) { have_train[start + t[j]][j][1] = 1; } start += t[j]; } } #define INF 10000000 int counts = 0; int dp[205][205]; for (int i = 1; i <= N-1; i++) dp[T][i] = INF; dp[T] = 0; for (int i = T - 1; i >= 0; i--){ for (int j = 1; j <= N; j++){ dp[i][j] = dp[i+1][j] + 1; if (j < N && i + t[j] <= T && have_train[i][j][0]){ dp[i][j] = min(dp[i][j], dp[i+t[j]][j+1]); // t[j] is the time between station j and station j+1 } if (j > 1 && i + t[j-1] <= T && have_train[i][j][1]){ dp[i][j] = min(dp[i][j], dp[i+t[j-1]][j-1]); // t[j-1] is the time between station j-1 and station j } } } if (dp[0][1] >= INF) printf("Case Number %d: impossible\n", ++counts); else printf("Case Number %d: %d\n", ++counts, dp[0][1]); } return 0; }
相关文章推荐
- Web for Pentester XSS Example 01-09
- [转载] 姚仁禄先生的创意讲座(09上)——01 什么是设计
- Tornado框架09-异步01
- php http扩展;json串的一个作用;oauth的signature函数 (09-01-1012)
- 05/09/01
- 06/01/09
- cocos2d-x自定义按钮类 分类: cocos2d代码编写 2015-07-29 09:01 6人阅读 评论(0) 收藏
- 2015_09_01_暑假集训结束_第一次省赛
- 06/01/09
- 09-01 HDU_Steps2.2 HDU1568 HDU1443 HDU1997 HDU1222 HDU 1249 HDU1013 HDU1066 HDU2674
- 看叶小钗《求职准备01-09》系列有感
- 09_注解01
- 09-01 Java final,多态,抽象类,接口
- [bbk2191] 第32集 - Chapter 09-Optimizing Sore Perations(01)
- 01-09-2015—员工管理系统完结
- Flask—09-项目部署(01)
- 看叶小钗《求职准备01-09》系列有感
- ToLua学习笔记(九) Example 09 Dictionary
- 如何识别高级的验证码(pstzine_09_01.txt)
- Chapter 09-Manipulating Data - 01