首页 > 代码库 > vijos1741 观光公交 (贪心)
vijos1741 观光公交 (贪心)
https://www.vijos.org/p/1741
P1741观光公交 请登录后递交 标签:NOIP提高组2011[显示标签] 描述风景迷人的小城Y市,拥有n个美丽的景点。由于慕名而来的游客越来越多,Y市特意安 排了一辆观光公交车,为游客提供更便捷的交通服务。观光公交车在第0分钟出现在1号景点,随后依次前往2、3、4……n号景点。从第i号景点开到第i+1 号景点需要Di分钟。任意时刻,公交车只能往前开,或在景点处等待。 设共有m个游客,每位游客需要乘车1次从一个景点到达另一个景点,第i位游客在Ti分钟来到景点Ai,希望乘车前往景点Bi(Ai<Bi)。 为了使所有乘客都能顺利到达目的地,公交车在每站都必须等待需要从该景点出发的所有乘客都上车后才能出发开往下一景点。假设乘客上下车不需要时间。 一个乘客的旅行时间,等于他到达目的地的时刻减去他来到出发地的时刻。因为只有一辆观光车,有时候还要停下来等其他乘客,乘客们纷纷抱怨旅行时间太 长了。于是聪明的司机ZZ给公交车安装了k个氮气加速器,每使用一个加速器,可以使其中一个Di减1。对于同一个Di可以重复使用加速器,但是必须保证使 用后Di大于等于0。 那么ZZ该如何安排使用加速器,才能使所有乘客的旅行时间总和最小? 格式输入格式第1行是3个整数n, m, k,每两个整数之间用一个空格隔开。分别表示景点数、乘客数和氮气加速器个数。 第2行是n-1个整数,每两个整数之间用一个空格隔开,第i个数表示从第i个景点开往第i+1个景点所需要的时间,即Di。 第3行至m+2行每行3个整数Ti, Ai, Bi,每两个整数之间用一个空格隔开。第i+2行表示第i位乘客来到出发景点的时刻,出发的景点编号和到达的景点编号。 输出格式共一行,包含一个整数,表示最小的总旅行时间。 样例1样例输入1[复制]3 3 21 40 1 31 1 25 2 3 样例输出1[复制]10 限制1s 提示样例说明: 对D2使用2个加速器,从2号景点到3号景点时间变为2分钟。 公交车在第1分钟从1号景点出发,第2分钟到达2号景点,第5分钟从2号景点出发,第7分钟到达3号景点。 第1个旅客旅行时间7 - 0 = 7分钟; 总时间7 + 1 + 2 = 10分钟。 数据范围: 对于10%的数据,k = 0; 来源NOIp2011提高组Day2第三题 |
大意:题目说得很清楚,我都怕。
题解:贪心,一个个选择氮气加速的位置。
首先我们看乘客所花时间和怎么计算,容易得到一个乘客所花的时间等于
ar[b[i]] - T[i]
其中b[i]为该乘客的终点,ar[x]为到达x站的时间,T[i]为该乘客出发的时间。
我们把到达x的乘客统计,cntto[x]为到达x的乘客的数量,然后所有乘客所花的时间和,
(未完待续)