推荐这篇题解: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. Springboot与日志

    日志框架 比如开发一个大型系统:1.System.out.println(""):将关键数据打印在控制台:去掉?写在一个文件?2.框架来记录系统的一些运行时信息:日志框架 :riz ...

  2. 枚举子集&高位前缀和

    最近做的题里面有这个东西,于是写一篇博客总结一下吧. 枚举子集 枚举子集就是状压的时候枚举其中的二进制位中的1的子集.直接暴力枚举二进制位时间复杂度是\(O(4^n)\),但是我们可以发现,对于每一位 ...

  3. SDN前瞻 网络的前世今生

    本文基于SDN导论的视频而成:SDN导论 目前网络层面流行的技术概念:虚拟中心:公有云私有云:数据中心等等. SDN主要的模拟器:Mininet OpenDaylight(Cisco) ONOS(AT ...

  4. python 浮点数转分数

    from fractions import Fraction value = 4.2 print(Fraction(value).limit_denominator())

  5. [OSG]OSG的相关扩展

    参考:osg官网 http://www.osgchina.org/index.php?view=article&id=176 http://trac.openscenegraph.org/pr ...

  6. oracle10g连接自动断开,报ORA-03135错误

    问题描述: oracle使用过一段时间,连接断开,报ORA-03135错误. 问题挖掘: 用pl/sql和sqlplus连接oracle,也存在该问题,确定该问题与连接方式无关. 查看服务器,发现没有 ...

  7. Creating SSL keys, CSRs, self-signed certificates, and .pem files.

    What is the whole darned process? Well that’s a good question. For my purposes, this is what I need ...

  8. 多个数值转QString

    int, float, double等数值类型转换为QString的方法 1. 用QTextStream QTextStream类可以用数据流的方式直接将任意多个数值.字符.字符串等传入QString ...

  9. Oracle管道函数(Pipelined Table Function)实现的实例

    1. 简单的例子(返回单列的表) 1>创建一个表类型 create or replace type t_table is table of number; 2>创建函数返回上面定义的类型 ...

  10. 使用Pandas: str.replace() 进行文本清洗

    前段时间参加了Kaggle上的Mercari Price Suggestion Challenge比赛,收获良多,过些时候准备进行一些全面的总结,本篇文章先谈一个比赛中用到的小技巧. 这个比赛数据中有 ...