题解:

做这题的时候为了敢速度- - 直接orz了神小黑的题解

其实我还是有想一个拙计的方法的- -

dp:f[i][j] 表示到i点使用j个加速器 在i前上车的人的时间和

轻松愉悦转移之 - - 但是有很严重的两个问题

1.空间复杂度O(nk)爆掉

2.时间复杂度O(nk^2)更呵呵- -

于是弃疗

正解:

贪心!

time[i]表示到i点的时间

last[i]表示从i出发的人的最晚到达的时间

sum[i]表示在i或i前下车的人数

f[i]表示在i后time[j]<=last[j]的最小j

贪心每个加速器在哪使用

选出使sum[f[i]]-sum[i]最大的i

证明:

显然每次使用加速器都要在能让最多人加速的地方使用

而如果在i点使用加速器 我能使在i+1到f[i]下车的人都加速

超过f[i]下车的由于要在f[i]车站等人 所以相当于没加速

sum[f[i]]-sum[i] 即为在i+1到f[i]下车的人

优化:

orz神ak想出的优化

我们在选出i的同时 显然可以同时使用好几个加速器 只要使用后i+1到f[i]-1没有 time[j]<last[j]

于是我们可以统计i+1到f[i]-1中last[j]-time[j]的最小值 直接使用这么多

注意 如果这个最小值大于剩余的加速器 或大于i到i+1所需的时间 那么取他们的最小值

原来的时间复杂度为O(nk) 而这样做复杂度为O(n^2)

因为对于任意一对(i,f[i])如果他们被加速过 那么之后就不可能再加速了

代码:

 #include <cstdio>
const int N=;
struct info{
int x,y,t;
info(const int a=,const int b=,const int c=):
x(a),y(b),t(c){}
}im[];
int n,m,k,out[N],ti[N],last[N],sum[N],lon[N],ans;
int max(int x,int y){ return x>y ? x : y; }
void work(){
while (k){
int x=,y,z;
for (int i=n,la=n,min=;i>=;i--){
if (sum[la]-sum[i]>x && lon[i+]){
x=sum[la]-sum[i];
y=i;
z=min;
if (lon[i+]<z) z=lon[i+];
}
if (i<n)
if (min>ti[i]-last[i]) min=ti[i]-last[i];
if (ti[i]<=last[i]){
la=i;
min=;
}
}
if (z>k) z=k;
k-=z;
ans-=x*z;
lon[y+]-=z;
for (int i=y+;i<=n && ti[i]>last[i];i++) ti[i]-=z;
}
}
void maketi(){
for (int i=;i<=n;i++){
sum[i]=sum[i-]+out[i];
ti[i]=max(ti[i-],last[i-])+lon[i];
}
}
int main(){
scanf("%d%d%d",&n,&m,&k);
int x,y,z;
for (int i=;i<=n;i++) scanf("%d",&lon[i]);
for (int i=;i<=m;i++){
scanf("%d%d%d",&x,&y,&z);
im[i]=info(y,z,x);
last[y]=max(last[y],x);
++out[z];
}
maketi();
for (int i=;i<=m;i++) ans+=ti[im[i].y]-im[i].t;
work();
printf("%d",ans);
}

【noip2011】观光公交的更多相关文章

  1. NOIP2011 观光公交

    3.观光公交 (bus.cpp/c/pas) 风景迷人的小城 Y 市,拥有 n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特 意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第 ...

  2. [NOIP2011] 观光公交(贪心)

    题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第 0 分钟出现在 1号景点,随后依次前往 2 ...

  3. 题解【洛谷P1315】[NOIP2011]观光公交

    题目描述 风景迷人的小城 Y 市,拥有 \(n\) 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务. 观光公交车在第 \(0\) 分钟出现在 \( ...

  4. 贪心(模拟费用流):NOIP2011 观光公交

    [问题描述] 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第0 分钟出现在1号景点,随后依次前往2. ...

  5. [NOIP2011]观光公交 题解

    题目大意: 就省了吧 思路: 应该算是贪心. 不难发现,加速只对所有在使用加速器之后连续的一段下车时不用等人的站点下车的人有用.这非常重要. 先算出不加速时的和,并预处理出每个站点最迟到的人的时间.每 ...

  6. [搬运] [贪心]NOIP2011 观光公交

    推荐这篇题解:http://www.cnblogs.com/Blacko/archive/2013/10/18/3376597.html 只不过这篇题解有一些细节没有说清,但建议自己思考- Codes ...

  7. NOIP2011 观光公交 加强版

    传送门 题目大意 给定从左到右的$n$个车站以及两两之间通行的需要的时间. 有$m$个人,第$i$个人会在$T_i$时刻出现在$a_i$车站,目的地是$b_i$. 一辆车第$0$时刻出现在一号站台,从 ...

  8. [luogu]P1315 观光公交[贪心]

    [luogu]P1315 [NOIP2011]观光公交 ——!x^n+y^n=z^n 题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车, ...

  9. Luogu 1315 【NOIP2011】观光公交 (贪心)

    Luogu 1315 [NOIP2011]观光公交 (贪心) Description 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供 ...

  10. 洛谷P1315 [NOIP2011提高组Day2T3] 观光公交

    P1315 观光公交 题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第 0 分钟出现在 1号 ...

随机推荐

  1. Flume学习——Flume中事务的定义

    首先要搞清楚的问题是:Flume中的事务用来干嘛? Flume中的事务用来保证消息的可靠传递. 当使用继承自BasicChannelSemantics的Channel时,Flume强制在操作Chann ...

  2. Creating a new Signiant Transfer Engine because the previous transfer had to be canceled.

    From: http://stackoverflow.com/questions/10548196/application-loader-new-weird-warning-about-signian ...

  3. C++ 中判断非空的错误指针

    最近在写网络上的东西,程序经过长时间的运行,会出现崩溃的问题,经过DUMP文件的查看,发现在recv的地方接收返回值的时候,数据的长度异常的大差不多16亿多字节.而查看分配后的char指针显示为错误的 ...

  4. C语言不是C++的严格子集

    C语言是C++的子集吗?C++是在C语言的基础上扩展而来并包含所有C语言的内容吗? 回复: 从实用角度讲,C++属于C语言的一个超集,基本上兼容ANSI C.但是从编译角度上讲,C语言的有些特性在C+ ...

  5. Zookeeper实战之单机集群模式

    前一篇文章介绍了Zookeeper的单机模式的安装及应用,但是Zookeeper是为了解决分布式应用场景的,所以通常都会运行在集群模式下.今天由于手头机器不足,所以今天打算在一台机器上部署三个Zook ...

  6. (从终端看linux-1)linux tty pty pts 概念 区别

    基本概念: 1> tty(终端设备的统称):tty一词源于Teletypes,或者teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东 ...

  7. D3D游戏编程系列(一):DXLib的介绍

    这篇文章里我准备向大家介绍下我封装的一个基础D3D库:DXLib.有了这样一个类库,可以减少很多无用功以及繁琐的工作,使我们的效率大大提高. DXLib.h #define DIRECTINPUT_V ...

  8. 一步一步制作yaffs/yaffs2根文件系统(四)---构建etc、dev等剩余目录

    开发环境:Ubuntu 12.04 开发板:mini2440  256M NandFlash   64M SDRAM 交叉编译器:arm-linux-gcc 4.4.3点此可下载 BusyBox版本: ...

  9. java ServerSocket服务端编程

    public class Test { public static void main(String[] args) throws Exception{ //1. 构造ServerSocket实例,指 ...

  10. mysql rr 查询出现的事务情况

    select * from INFORMATION_SCHEMA.INNODB_TRX\G The INNODB_TRX table contains information about every ...