题目描述
风景迷人的小城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该如何安排使用加速器,才能使所有乘客的旅行时间总和最小?
输入输出格式
输入格式:
输入文件名为bus.in。
第1 行是3 个整数n, m, k ,每两个整数之间用一个空格隔开。分别表示景点数、乘客数和氮气加速器个数。
第2 行是n-1 个整数,每两个整数之间用一个空格隔开,第i 个数表示从第i 个景点开往第i+1 个景点所需要的时间,即 Di 。
第3 行至m+2 行每行3 个整数 Ti, Ai, Bi,每两个整数之间用一个空格隔开。第 i+2 行表示第i 位乘客来到出发景点的时刻,出发的景点编号和到达的景点编号。
输出格式:
输出文件名为bus.out。共一行,包含一个整数,表示最小的总旅行时间。
输入输出样例
输入样例#1:
3 3 2
1 4
0 1 3
1 1 2
5 2 3
输出样例#1:
10
说明
【输入输出样例说明】
对D2 使用2 个加速器,从2 号景点到 3 号景点时间变为 2 分钟。
公交车在第1 分钟从1 号景点出发,第2 分钟到达2 号景点,第5 分钟从2 号景点出发,第7 分钟到达 3 号景点。
第1 个旅客旅行时间 7-0 = 7 分钟。
第2 个旅客旅行时间 2-1 = 1 分钟。
第3 个旅客旅行时间 7-5 = 2 分钟。
总时间 7+1+2 = 10分钟。
【数据范围】
对于10% 的数据,k=0 ;
对于20% 的数据,k=1 ;
对于40% 的数据,2 ≤ n ≤ 50,1 ≤ m ≤ 1,000,0 ≤ k ≤ 20,0 ≤ Di ≤ 10,0 ≤ T i ≤ 500;
对于60% 的数据,1 ≤ n ≤ 100,1 ≤ m ≤ 1,000,0 ≤ k ≤ 100 ,0 ≤ Di ≤ 100,0 ≤ T i ≤ 10,000 ;
对于100%的数据,1 ≤ n ≤ 1,000,1 ≤ m ≤ 10,000 ,0 ≤ k ≤ 100,000,0 ≤ Di ≤ 100 ,0 ≤ T i ≤ 100,000。
noip2011提高组day2第3题

需要倒着推,不错的,好好理解,NOIP前我又回来看了一遍,细细想想并不是多么难

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAXN 1010
int n,m,k,d[MAXN],t[MAXN*10],a[MAXN*10],b[MAXN*10];
int num[MAXN],last[MAXN],arr[MAXN],sum[MAXN];
int main(){scanf("%d%d%d",&n,&m,&k);for(int i=1;i<n;i++) scanf("%d",&d[i]);for(int i=1;i<=m;i++)scanf("%d%d%d",&t[i],&a[i],&b[i]);for(int i=1;i<=m;i++){num[b[i]]++;//i 站 下车的人数last[a[i]]=max(last[a[i]],t[i]);//最晚到达I站的时间}for(int i=2;i<=n;i++)arr[i]=max(arr[i-1],last[i-1])+d[i-1];//车到I站的时间int ans=0;for(int i=1;i<=m;i++)ans+=arr[b[i]]-t[i];int p,temp;while(k--){p=temp=-1;for(int i=n-1;i;i--){if(arr[i+1]<=last[i+1]) sum[i]=num[i+1];//车到下一站的时候 最慢的人还没有来那么这一段加速器惠及的人数 为到下一站下车的人数else sum[i]=sum[i+1]+num[i+1];if(sum[i]>temp&&d[i]){ temp=sum[i];p=i; }//sum[i]>temp贪心求最多的}if(p==-1) break;ans-=temp;//惠及的乘客们所省去的时间和d[p]--;for(int i=p+1;i<=n;i++)arr[i]=max(arr[i-1],last[i-1])+d[i-1];}printf("%d\n",ans);return 0;
}

NOIP2011 洛谷 P1315 观光公交相关推荐

  1. 洛谷P1315 观光公交

    SB贪心......暴露了我代码能力巨弱的本质. 题面 解:首先我们应该想到DP(但是我想到了贪心......) 然后分析题目本质,每个点有个限制,最早开走时间不得早于最晚上车时间. 然后我们就可以把 ...

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

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

  3. 【NOIP2011 Day 2】观光公交

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

  4. 【洛古 P1315】 [NOIP2011 提高组] 观光公交

    [NOIP2011 提高组] 观光公交 题目背景 感谢 @Transhumanist 提供的一组 Hack 数据 题目描述 风景迷人的小城 Y 市,拥有 n n n 个美丽的景点.由于慕名而来的游客越 ...

  5. 【做题记录】[NOIP2011 提高组] 观光公交

    P1315 [NOIP2011 提高组] 观光公交 我们想在 \(k\) 次加速每一次都取当前最优的方案加速. 考虑怎样计算对于每一条边如果在当前情况下使用加速器能够使答案减少的大小. 如果当前到达某 ...

  6. 洛谷P1003 铺地毯 noip2011提高组day1T1

    洛谷P1003 铺地毯 noip2011提高组day1T1 洛谷原题 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n ...

  7. 信息学奥赛一本通 1956:【11NOIP普及组】表达式的值 | 洛谷 P1310 [NOIP2011 普及组] 表达式的值

    [题目链接] ybt 1956:[11NOIP普及组]表达式的值 洛谷 P1310 [NOIP2011 普及组] 表达式的值 [题目考点] 表达式树 由带括号的中缀表达式构建表达式树 [解题思路] 思 ...

  8. 信息学奥赛一本通 1118:铺地毯 | 1863:【11NOIP提高组】铺地毯 | OpenJudge NOI 1.9 14 | 洛谷 P1003 [NOIP2011 提高组] 铺地毯

    [题目链接] ybt 1118:铺地毯 ybt 1863:[11NOIP提高组]铺地毯 OpenJudge NOI 1.9 14:铺地毯 洛谷 P1003 [NOIP2011 提高组] 铺地毯 [题目 ...

  9. 信息学奥赛一本通 1089:数字反转 | 1953:【11NOIP普及组】数字反转 | OpenJudge NOI 1.5 29 | 洛谷 P1307 [NOIP2011 普及组] 数字反转

    [题目链接] ybt 1089:数字反转 ybt 1953:[11NOIP普及组]数字反转 OpenJudge NOI 1.5 29:数字反转 洛谷 P1307 [NOIP2011 普及组] 数字反转 ...

  10. c/c++ 洛谷 P1003 【NOIP2011 提高组】 铺地毯

    题目链接 洛谷 P1003 [NOIP2011 提高组] 铺地毯 不想戳的看下图: 样例及解释 数据范围 解题思路: 从后往前找地毯,找到了我就输出并返回. 代码如下: #include <io ...

最新文章

  1. js sdk 一键分享 微信_微信jssdk实现分享到微信
  2. 【渝粤教育】广东开放大学 法理学 形成性考核 (46)
  3. 对于Office Live平台的思考
  4. iBatis——执行原理
  5. ausam3x 嵌入式linux,ATSAM3X8EA-AU - 微控制器, 32位, SAM3X系列, ARM 皮质-M3, 84nb
  6. python file read和write的速度_python file.truncate() 然后 file.write() file.read() 出现乱码...
  7. 超有意思的代码注释_程序员搞笑的代码注释:谁的代码注释我都不服,就服你的...
  8. java技术 ppt_Java技术简介与基本宣告ppt课件.ppt
  9. javascript--Math相关
  10. Topaz Gigapixel AI 人工智能图像放大
  11. iOS AVPlayer播放模式的实现(随机播放 列表循环 单曲循环)
  12. window.opener 与 window.dialogArguments的用法
  13. 计算机连接未识别的网络,电脑网络连接处出现未识别的网络无Internet访问的解决办法...
  14. 央行开通个人信用报告在线查询服务
  15. VIN码识别又叫车架号识别,OCR技术深度应用
  16. 如何设置浏览器信任局域网的网站证书
  17. 想把手机内容投屏到电脑 并且可以用电脑控制手机怎么办,很简单
  18. 第三阶段:1.数据分析:2.定性定量数据分析
  19. IDEA查看jks文件
  20. 细谈AEM TestPro K50线缆测试仪

热门文章

  1. 鸡蛋,必须放在合适的篮子里
  2. 微信好友排行榜 最简教程 二
  3. Linux下pppd拨号脚本配置
  4. freeswitch拨打分机号
  5. Gspay 和 95epay
  6. 解决Ubuntu DVD 用wubi 安装时候要重新下载镜像的笨方法
  7. 股票学习-量柱和k线-第三天
  8. 计算机二级wps office考试题库,计算机等级考试题库:WPS Office试题
  9. 项目管理助力组织赢在VUCA时代
  10. 爱剪辑如何解决分段视频在串接处快两秒的问题