推荐这篇题解:http://www.cnblogs.com/Blacko/archive/2013/10/18/3376597.html

只不过这篇题解有一些细节没有说清,但建议自己思考~

Codes:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
 
const int N=1010,M=10010;
int D[N];
ll up[N],leave[N],upt[N];
ll sum[N],f[N];
struct Passenger{
    int s,e;
    ll t;
}p[M];
ll endt[N];
int n,m,k;
 
inline ll conc(bool spdup){
    int nt,np;
    nt=np=0;
    ll eff=-0x7fffffff,idx=-1,ne;
    //计算endt
    for(int i=1;i<=n;i++){ endt[i]=max(endt[i-1],upt[i-1])+D[i-1]; } //计算f for(int i=n-1;i>=1;i--)f[i]=(upt[i+1]>=endt[i+1]?1:f[i+1]+1);
    //计算eff
    for(int i=1;i<=n;i++){ if(!D[i])continue; ne=sum[f[i]+i]-sum[i]; if(ne>eff)eff=ne,idx=i;
    }
    if(spdup)D[idx]--;
    else{
        nt=0;
        for(int i=1;i<=m;i++)
            nt+=endt[p[i].e]-p[i].t;
        return nt;
    }
    return 0;
}
 
int main(){
    #ifdef LOCAL
    freopen("bus.in","r",stdin);
    freopen("bus.out","w",stdout);
    #endif
    scanf("%d%d%d",&n,&m,&k);
    for(int i=1;i<=n-1;i++){
        scanf("%d",&D[i]);
    }
    ll t,u,l;
    for(int i=1;i<=m;i++){
        scanf("%lld%lld%lld",&t,&u,&l);
        upt[u]=max(upt[u],t);
        up[u]++;
        leave[l]++;
        p[i].s=u,p[i].e=l,p[i].t=t;
    }
    //计算sum
    for(int i=1;i<=n;i++)sum[i]=sum[i-1]+leave[i];
    for(int i=1;i<=k;i++){
        conc(true);
    }
    printf("%lld\n",conc(false));
    return 0;
}

Solution:

两点需要注意的地方(按上方题解提供的数组含义来写):

1.f[i]的推导。我一开始以为是若last[i+1]>time[i+1]则为0,得到的结果比答案大一点点……然后稍微魔改成了last[i+1]>=time[i+1]则为1,就tm对了……想了一下,可能是因为即使下一个站需要等待,这一个站至少能影响到第二个站;以及为什么是last[i+1]>=time[i+1]而非last[i+1]>time[i+1]——当last[i+1]==time[i+1]时,此时time[i+1]再减少,下一个站仍然会变成需要等待,所以也对后方没有影响,所以last[i+1]>=time[i+1]才是正确的范围。

2.当一条边已经被加速到0时,不能再加速。

其它看上面的题解和我的代码吧2333

[搬运] [贪心]NOIP2011 观光公交的更多相关文章

  1. NOIP2011 观光公交

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

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

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

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

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

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

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

  5. [NOIP2011]观光公交 题解

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

  6. NOIP2011 观光公交 加强版

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

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

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

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

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

  9. luoguP1315 观光公交 题解(NOIP2011)(贪心)

    P1315 观光公交 题目 #include<iostream> #include<cstdlib> #include<cstdio> #include<cm ...

随机推荐

  1. [BZOJ3237]连通图

    Description Input Output Sample Input 4 5 1 2 2 3 3 4 4 1 2 4 3 1 5 2 2 3 2 1 2 Sample Output Connec ...

  2. C#中的静态构造函数

    https://msdn.microsoft.com/en-us/library/k9x6w0hc(v=vs.140).aspx A static constructor is used to ini ...

  3. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none 解决方法

    参考:CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none 环境 主系统 OS X,虚拟机,Ubuntu 14.04 64bit. 问题描述 ...

  4. [原][译][osgearth]API加载地球(OE官方文档翻译)

    原文参考:http://docs.osgearth.org/en/latest/developer/maps.html#programmatic-map-creation 本人翻译水平有限... 加载 ...

  5. mytabits表关联一对一(多对一?)

    mytabits表关联一对一(多对一?) association联合 联合元素用来处理“一对一”的关系.需要指定映射的Java实体类的属性,属性的javaType(通常MyBatis 自己会识别).对 ...

  6. 豆知识( DNS; HTTP入门;网络协议)

    DNS入门知识 DNS服务器 通过DNS服务器,才能知道某个域名的IP地址到底是什么. Linux系统里面,DNS服务器的IP地址保存在/etc/resolv.conf文件 使用工具软件dig可以查询 ...

  7. 简话Angular 00 为什么要学Angular

    一句话: 现在不学Angular的结局,就和5年前不学JQuery一样! 谁学谁知道,早学早进阶! 1. JQuery vs Javascipt 问两个问题: 1) 你用过JQuery吗?当然! 2) ...

  8. bzoj4811

    题解: 对于每一个节点,我们建立v0,v1 v0表示0进过会怎么样 v1表示1进过会怎么样 然后线段树合并 代码: #include <cstdio> #include <cstri ...

  9. Python3 运算符(八)

    什么是运算符? 举个简单的例子 4 +5 = 9 . 例子中,4 和 5 被称为操作数,"+" 称为运算符. Python语言支持以下类型的运算符: 算术运算符 比较(关系)运算符 ...

  10. Location对象的页面跳转方法介绍

    JavaScript中使用location对象可以通过很多种方式改变浏览器的位置.最常用的方法应该是下面几种: demo.js 1 2 3 location.href = "http://w ...