【NOIP2011 Day 2】观光公交

【问题描述】

  小城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该如何安排使用加速器,才能使所有乘客的旅行时间总和最小?

  对于100%的数据,1≤n≤1,000,1≤m≤10,000,0≤k≤100,000,0≤Di ≤100,0≤Ti≤100,000。

【分析】

  设t[i]表示来到第i个景点的乘客最晚的时间,time[i]表示车到达第i个景点的最小时间。

  因为每个乘客到达的时间已经固定,所以要使总时间最小,就是使Σtime[b[i]]最小,其中b[i]代表每位乘客的目的地。

  先考虑不用加速器的情况。可以直接递推求出答案,time[i] = max(time[i - 1],t[i - 1]) + d[i - 1];

  接下来再来考虑使用加速器减少的时间。对于每个加速器,我们必须使这个加速器获得最大的效益,即使尽可能多的乘客旅行时间减一。如果我们在i到i + 1间使用加速器的话,那么到i + 1站的乘客的旅行时间都会减一,但是如果time[i + 1]小于t[i + 1]的话,车就要在i + 1站等到t[i + 1]所有的乘客上车,在i + 1站以后下车的乘客的时间是一样的,也就是说这个加速器对后面下车的乘客没有影响。我们可以用递推求出每个i最远能影响的车站。

  g[i] = g[i + 1]    (time[i + 1] > t[i + 1])

  g[i] = i + 1 (time[i + 1] <= t[i + 1])

  那么,我们用一个加速器所能减少一个单位时间的乘客就是sum[g[i]] - sum[i],每次找出使这个最大的i即可。然后把ans减掉,维护time,g

  这题说白了就是贪心。加速器的使用各不影响。易知这个贪心是正确的。

  代码还是比较好写的。

【代码】

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct node
{int start,arrive,target;
}a[20000];
int n,m,K,ans;
int f[20000],Time[20000],g[20000],dist[20000],sum[20000];
int main()
{scanf("%d %d %d",&n,&m,&K);for (int i = 1;i < n;i ++)scanf("%d",&dist[i]);for (int i = 1;i <= m;i ++){scanf("%d %d %d",&a[i].arrive,&a[i].start,&a[i].target);f[a[i].start] = max(f[a[i].start],a[i].arrive);sum[a[i].target] ++ ;}for (int i = 2;i <= n;i ++)sum[i] += sum[i - 1];Time[1] = 0;for (int i = 2;i <= n;i ++)Time[i] = max(Time[i - 1],f[i - 1]) + dist[i - 1];for (int i = 1;i <= m;i ++)ans += Time[a[i].target] - a[i].arrive;while (K){g[n] = n;g[n - 1] = n;for (int i = n - 2;i ; i -- ){if (Time[i + 1] <= f[i + 1])g[i] = i + 1;else g[i] = g[i + 1];}int Max = 0,j;for (int i = 1;i <= n;i ++)if (sum[g[i]] - sum[i] > Max && dist[i] > 0)Max = sum[g[i]] - sum[i],j = i;if (!Max) break;ans -= Max;dist[j] --;K --;Time[1] = 0;for (int i = 2;i <= n;i ++)Time[i] = max(Time[i - 1],f[i - 1]) + dist[i - 1];}cout << ans;
}

 

 

转载于:https://www.cnblogs.com/N-C-Derek/p/3371058.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259286.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基本数据类型的自动装箱

这里以Integer类型举例&#xff1a; Integer a 1; a 2; 编译后.calss文件是这样的 Integer a Integer.valueOf(1); 自动装箱 a Integer.valueOf(a.intValue() 2); 自动拆箱&#xff0c;再自动装箱 转载于:https://www.cnblogs.com/feiZhou/p/9344494.html

自媒体和计算机相关吗,做自媒体,台式电脑跟笔记本电脑用哪个好呢?

四阿哥fly回答数&#xff1a;143 | 被采纳数&#xff1a;162019-06-29 12:16:21作为去年折腾了一年自媒体&#xff0c;各种情况遇到过&#xff0c;分享下台式电脑和笔记本到底哪个好&#xff1f;好在哪里&#xff1f;如果真的要选择&#xff0c;个人还是推荐用台式比较好。工…

JS脚本显示当前日期+星期几[转]

以下的代码提供了显示当前日期和星期几的实现方法&#xff1a; function writeDateInfo() { var day""; var month""; var ampm""; var ampmhour""; var myweekday""; var…

openCV中waitKey函数介绍

#include <opencv2/opencv.hpp> #include < iostream > #include <window.h> using namespace cv; using namespace std;int main() {Mat im;double duration;im imread("1.jpg");// 测试没有namedWindow时的waitKey执行时间duration static_cas…

JavaScript indexOf() 方法 和 lastIndexOf() 方法

indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。 lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置&#xff0c;在一个字符串中的指定位置从后向前搜索。 语法&#xff1a; indexOf() &#xff1a; stringObject.indexOf(searchvalue,fromi…

React进阶—性能优化

React性能优化思路 软件的性能优化思路就像生活中去看病&#xff0c;大致是这样的&#xff1a; 使用工具来分析性能瓶颈&#xff08;找病根&#xff09;尝试使用优化技巧解决这些问题&#xff08;服药&#xff09;使用工具测试性能是否确实有提升&#xff08;疗效确认&#xff…

内蒙古银行银行招聘计算机研究生,内蒙古银行招聘公告

出国留学网考研报名资讯&#xff1a;内蒙古2015考研报考公告&#xff0c;希望仔细阅读考研报名公告&#xff0c;及时进行报名&#xff0c;尽量避开报名高峰期!内蒙古2015考研报考公告一、关于报考点的的安排我区共设12个报考点&#xff1a;呼和浩特市招生考试管理中心、内蒙古大…

ubuntu 13.04 telnet 详细配置

1. sudo vi /etc/xinetd.d/telnet并加入以下内容&#xff1a;# default: on# description: The telnet server serves telnet sessions; it uses \# unencrypted username/password pairs for authentication.service telnet{disable noflags REUSEsocket_type streamwait …

C++定义隐式转换函数,将类转换为内部的一个成员变量

C中单参数构造函数若不声明为explict&#xff0c;在合适的场合可以产生隐式转换&#xff1a;由成员变量类型转换为类类型。 下面的代码展示如何实现反向的转换&#xff1a; Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/…

2015年百度面经

百度问的是开放性的问题&#xff0c;应该是为了考察你的综合能力吧&#xff0c;问了两个问题 一&#xff0c;html&css 涉及的内容 块元素与行内元素&#xff0c;浮动&#xff0c;清除浮动 1&#xff0c;一个100px的容器&#xff0c;里面塞了一个空的div&#xff0c;这个di…

计算机网页设计与制作论文,网页设计与制作论文

二十一世纪是信息化的时代&#xff0c;通过互联网&#xff0c;就能达到足不出户便可了解世界的目的。为了加深对互联网的了解&#xff0c;《网页设计与制作》这门课的出现就成为了必然。1《网页设计与制作》现状问题分析(1)对课程不了解很多学生都有这个困惑&#xff0c;这门课…

mybatis中#{}和${}的区别

http://www.cnblogs.com/davidwang456/p/4929426.html转载于:https://www.cnblogs.com/xtdxs/p/6666017.html

游标定位:Cursor类

关于 CursorCursor 是每行的集合。使用 moveToFirst() 定位第一行。你必须知道每一列的名称。你必须知道每一列的数据类型。Cursor 是一个随机的数据源。所有的数据都是通过下标取得。关于 Cursor 的重要方法&#xff1a;close() 关闭游标&#xff0c;释放资源copyStringToBuf…

Supervised Descent Method and its Applications to Face Alignment

广播说明&#xff1a; 进入深度学习时代&#xff0c;如下的方法已经失去可比性&#xff0c;且我们的代码实现地很粗糙&#xff0c;如果坚持要用&#xff0c;推荐如下代码 https://github.com/wanglin193/SupervisedDescentMethod &#xff08;看起来作者对sdm实现的不错&…

导出Excel神器最终版

泛型列表导出Excel&#xff1a; 最近好多导出问题就整这么个玩意共享给大家public class Export{/// <summary>/// 泛型导出Excel/// </summary>/// <param name"strCaption">Excel文件中的标题</param>/// <param name"pList"…

国外计算机课程lab,计算机系统实验之bomblab

今天刚刚验收CSAPP实验3&#xff0c;趁着余温&#xff0c;记录一下这个实验&#xff0c;顺便回顾下CSAPP课程的相关知识。实验目的1.使用gdb工具反汇编出汇编代码&#xff0c;结合c语言文件找到每个关卡的入口函数。然后分析汇编代码&#xff0c;分析得到每一关的通关密码。2.熟…

批量实现ssh免交互认证

因为要部署一批服务器&#xff0c;为了以后管理方便&#xff0c;要进行免密认证。一台一台做很费时&#xff0c;脚本又得手动输密码。于是上网搜了搜&#xff0c;发现一个非常简单的免交互认证&#xff0c;不需要入密码即可完成&#xff01;环境&#xff1a;centos 6.8 虚拟机V…

CSS兼容IE6,IE7,FF的技巧(COPY来的,还没看)

一、CSS HACK 以下两种方法几乎能解决现今所有HACK.翻阅很多资料&#xff0c;已测试可以使用。 1, !important 随着IE7对!important的支持, !important 方法现在只针对IE6的HACK.(注意写法.记得该声明位置需要提前.) PLAIN TEXT CSS: #wrapper { width: 100px!important; /* IE…

计算机复制粘贴教案,信息技术《文本的复制与移动》教案

一、教学内容分析本课是小学信息技术教材四年级下册第十八课文本的复制与移动。是在学生掌握了文件夹的复制、移动&#xff0c;以及掌握了Word的启动、退出&#xff0c;在Word中输入文字并保存等内容之后的又一个知识点&#xff0c;学好这一课为学生以后学习文本的编辑与操作&a…

ajax基础知识

AJAX 指异步JavaScript及XML&#xff08;Asynchronous JavaScript And XML&#xff09;运用ajax步骤&#xff1a;创建对象&#xff08;注意IE6兼容问题&#xff09;、连接服务器、发送请求、接收返回ajax的readystate属性&#xff1a;0&#xff1a;表示未初始化1&#xff1a;表…