zoukankan      html  css  js  c++  java
  • 火车安排问题(dp好题)

    火车站内往往设有一些主干线分叉出去的铁路支路,供火车停靠,以便上下客或装载货物。铁路 支路有一定长度;火车也有一定的长度,且每列火车的长度相等。 假设某东西向的铁路上,有一小站。该站只有一条铁路支路可供火车停靠,并且该铁路支路最多 能容纳 M 辆火车。为了火车行驶的通畅,该站只允许火车自东方进站,自西方出站,且先进站的火车 必须先出站,否则,站内火车将发生堵塞。 该火车站工作任务繁忙。每天都有 N 辆自东方驶向西方的火车要求在预定时刻进站,并在站内作 一定时间的停靠。为了满足每辆进站火车的要求,小站的调度工作是井井有条地开展。在小站每天的 工作开始前,小站工作人员须阅读所有火车的进站申请,并决定究竞接受哪些火车的申请。而对于不能 满足要求的火车,小站必须提前通知它们,请它们改变行车路线,以免影响正常的铁路运输工作。由
    于火车进站、出站的用时可以忽略不计,小站允许几辆火车同时进站或出站,且小站工作人员可以任意安排这些火车进站的先后排列次序。小站的工作原则是尽量地满足申请火车的要求。 请你编一个程序,帮助工作人员考察某天所有火车的进站申请,计算最多能满足多少火车的要求。 N<=100,M<=3;

    这题一开始想到贪心,按出站时间排序,能进的就进,但是事实证明这个只适用于m=1的情况,因为m大于1的时候 很难判断能否进站。

    正解是分3次dp。讲一下m=1和2的情况,m=3类推即可。

    先按进站时间为第一关键字,出站时间为第二关键字排序。

    m=1时,F[i]表示第i辆车最后出站的情况下能满足多少火车的申请。初始F[i]=1;F[i]=max{F[j]+1}(j<i且i进站前j已经出站);

    m=2时,F[i][j]表示第i辆车倒数第二个出站,第j辆车倒数第一个出站的情况下最多能满足火车的申请。 初始F[i][j]=2;F[i][j]=max{F[k][i]+1}(出站顺序k<i<j,并且j进站之前k已经出站);

    Every day is meaningful, keeping learning!
  • 相关阅读:
    luogu3810 【模板】三维偏序(陌上花开)
    POJ 1704 Georgia and Bob(阶梯博弈)
    URAL 1004 Sightseeing Trip(floyd求最小环+路径输出)
    BZOJ 1064: [Noi2008]假面舞会(dfs + 图论好题!)
    Codeforces Round #332 (Div. 2) D. Spongebob and Squares(枚举)
    HDU 4313 Matrix(并查集)
    HDU 4312 Meeting point-2(切比雪夫距离转曼哈顿距离)
    HDU 4311 Meeting point-1(曼哈顿距离最小)
    HDU 4309 Seikimatsu Occult Tonneru(最大流+二进制枚举)
    HDU 4303 Hourai Jeweled(树形DP)
  • 原文地址:https://www.cnblogs.com/vb4896/p/3893344.html
Copyright © 2011-2022 走看看