火车进站[Codevs 3595]
来源:互联网 发布:wkwebview 本地js 编辑:程序博客网 时间:2024/04/29 10:15
题目描述 Description
火车站内往往设有一些主干线分叉出去的铁路支路,供火车停靠,以便上下客或装载货物。铁路支路有一定长度;火车也有一定的长度,且每列火车的长度相等。
假设某东西向的铁路上,有一小站。该站只有一条铁路支路可供火车停靠,并且该铁路支路最多能容纳
为了满足每辆进站火车的要求,小站的调度工作是井井有条地开展。在小站每天的工作开始前,小站工作人员须阅读所有火车的进站申请,并决定究竞接受哪些火车的申请。而对于不能满足要求的火车,小站必须提前通知它们,请它们改变行车路线,以免影响正常的铁路运输工作。由于火车进站、出站的用时可以忽略不计,小站允许几辆火车同时进站或出站,且小站工作人员可以任意安排这些火车进站的先后排列次序。小站的工作原则是尽量地满足申请火车的要求。
请你编一个程序,帮助工作人员考察某天所有火车的进站申请,计算最多能满足多少火车的要求。
输入描述 Input Description
共
第一行是两个正整数
以下
输出描述 Output Description
仅一行,是一个正整数
样例输入 Sample Input
6 3
2 4
1 7
3 6
5 7
8 10
9 11
样例输出 Sample Output
5
数据范围及提示 Data Size & Hint
分析 I Think
我们把火车按出站时间从小到大排序
代码
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int Size = 120;struct time{ int s,t; bool operator < (const time &h)const {return t<h.t||(t==h.t&&s<h.s);}}a[Size];int f[Size][Size][Size];int n,m;void work1();void work2();void work3();int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;++i) scanf("%d%d",&a[i].s,&a[i].t); sort(a+1,a+n+1); switch(m){ case 1 : work1();break; case 2 : work2();break; case 3 : work3();break; } return 0;}void work1(){ int early = a[1].t; int ans = 1; for(int i=2;i<=n;++i) if(a[i].s >= early){ ++ans; early = a[i].t; } printf("%d\n",ans);}void work2(){ for(int i=1;i<=n;++i) f[0][i][0] = 1; for(int i=1;i<=n;++i) for(int j=i+1;j<=n;++j) if(a[j].s >= a[i].s) for(int k=0;k<i;++k) if(a[k].t <= a[j].s) f[i][j][0] = max(f[k][i][0]+1,f[i][j][0]); int ans = 0; for(int i=0;i<=n;++i) for(int j=i+1;j<=n;++j) ans = max(ans,f[i][j][0]); printf("%d\n",ans);}void work3(){ for(int i=1;i<=n;++i) f[0][0][i] = 1; for(int i=0;i<=n;++i) for(int j=i+1;j<=n;++j) if(a[j].s >= a[i].s) for(int k=j+1;k<=n;++k) if(a[k].s >= a[j].s) for(int r=0;r<(i==0?1:i);++r) if(a[r].t <= a[k].s) f[i][j][k] = max(f[i][j][k],f[r][i][j]+1); int ans = 0; for(int i=0;i<=n;++i) for(int j=i+1;j<=n;++j) for(int k=j+1;k<=n;++k) ans = max(ans,f[i][j][k]); printf("%d\n",ans);}
- 火车进站[Codevs 3595]
- 火车进站
- 火车进站
- 火车进站
- 火车进站
- 火车进站
- 火车进站
- 火车进站
- 火车进站
- 火车进站
- 火车进站
- 火车进站出站
- 火车进站(栈)
- h du1022 火车进站
- 火车进站出站问题
- 火车进站调用栈
- C++ HOJ 火车进站
- 火车进站 华为oj
- ReentrantReadWriteLock读写锁的使用
- 问题 N: 二叉查找树(Ⅲ)-判同
- python学习-day1
- 使用c语言实现一个简单的易语言
- mina高并发短连接导致java.io.IOException: Too many open files解决方案
- 火车进站[Codevs 3595]
- hdu 2973 威尔逊定理+素数筛法
- 命名空间和PDO包含的常规属性和函数方法
- LeetCode 054 Spiral Matrix
- android中的网络解析xml,json,html框架
- Apache Shiro 身份认证例子
- alibaba的fastjson的用法
- 使用spring @Scheduled注解执行定时任务
- C++走向远洋——68(十六周、文件)