[搬运] [贪心]NOIP2011 观光公交
推荐这篇题解: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 观光公交的更多相关文章
- NOIP2011 观光公交
3.观光公交 (bus.cpp/c/pas) 风景迷人的小城 Y 市,拥有 n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特 意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第 ...
- [NOIP2011] 观光公交(贪心)
题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第 0 分钟出现在 1号景点,随后依次前往 2 ...
- 贪心(模拟费用流):NOIP2011 观光公交
[问题描述] 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第0 分钟出现在1号景点,随后依次前往2. ...
- 题解【洛谷P1315】[NOIP2011]观光公交
题目描述 风景迷人的小城 Y 市,拥有 \(n\) 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务. 观光公交车在第 \(0\) 分钟出现在 \( ...
- [NOIP2011]观光公交 题解
题目大意: 就省了吧 思路: 应该算是贪心. 不难发现,加速只对所有在使用加速器之后连续的一段下车时不用等人的站点下车的人有用.这非常重要. 先算出不加速时的和,并预处理出每个站点最迟到的人的时间.每 ...
- NOIP2011 观光公交 加强版
传送门 题目大意 给定从左到右的$n$个车站以及两两之间通行的需要的时间. 有$m$个人,第$i$个人会在$T_i$时刻出现在$a_i$车站,目的地是$b_i$. 一辆车第$0$时刻出现在一号站台,从 ...
- [luogu]P1315 观光公交[贪心]
[luogu]P1315 [NOIP2011]观光公交 ——!x^n+y^n=z^n 题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车, ...
- Luogu 1315 【NOIP2011】观光公交 (贪心)
Luogu 1315 [NOIP2011]观光公交 (贪心) Description 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供 ...
- luoguP1315 观光公交 题解(NOIP2011)(贪心)
P1315 观光公交 题目 #include<iostream> #include<cstdlib> #include<cstdio> #include<cm ...
随机推荐
- nginx限制蜘蛛的频繁抓取
蜘蛛抓取量骤增,导致服务器负载很高.最终用nginx的ngx_http_limit_req_module模块限制了百度蜘蛛的抓取频率.每分钟允许百度蜘蛛抓取200次,多余的抓取请求返回503. ngi ...
- MSBI
https://blog.csdn.net/fanyingnedu/article/details/78597207 Familiarity with Microsoft BI Stack - SSI ...
- luogu p1219 八皇后
https://www.luogu.org/problem/show?pid=1219 经典问题,搜索一遍过. 重点是判断皇后能否在map[x][y]放下的条件 因为是dfs的时候过程中 x 是递增的 ...
- Python学习札记(二十六) 函数式编程7 修饰器
修饰器 NOTE 1.函数对象有一个__name__属性,可以拿到函数的名字: #!/usr/bin/env python3 def now(): print('2017/2/19') def mai ...
- java学习之浅谈多线程2--线程同步
如果一个共享资源被多个线程同时访问,可能会遭到破坏.举个例子说明这个问题,假设创建并启动100个线程,每个线程都往同一个账户中添加一个便士,代码如下: import java.util.concurr ...
- java学习之浅谈多线程1
创建任务和线程 任务就是对象,为了创建任务,必须首先为任务定义一个类.任务类必须实现Runnable接口.Runnable接口非常简单,它只有一个run方法.需要实现这个方法来告诉系统线程将如何运行. ...
- Python——列表表达式
https://www.cnblogs.com/xuyuanyuan123/p/6718403.html
- VS中的生成事件
1:为什么需要使用生成事件? 在实际开发过程中,一个公共使用的类库,在项目生成DLL后需要被复制到不同的目录下被引用,是不是觉得每次生成之后都需要人工复制是很麻烦的一件事情 我们可以利用VS中的项目生 ...
- Sub-process /usr/bin/dpkg returned an error code (1)解决方法
在ubuntu下使用apt-get install 安装资源的时候,总是会遇到Sub-process /usr/bin/dpkg returned an error code (1) 错了, 跟安装软 ...
- git 忽略不提交的文件3种情形
1..gitignore文件 :从未提交过的文件,从来没有被 Git 记录过的文件 也就是添加之后从来没有提交(commit)过的文件,可以使用.gitignore忽略该文件.只能作用于未跟踪的文件( ...