次元传送门:洛谷P1315

思路

思路大概想到了 可是代码实现却没想到 所以参考题解了 D2T3的贪心果然有难度

我们考虑在每次用加速器有两种情况

  • 到下一个点还需要等待:以后的时间就不再影响了
  • 到下一个点不需要等待:那么就会影响到后面的时间直到出现情况1(或者到最后一个点)

用sum[i]数组记录到i时的总人数 进行前缀和处理 e[i]为i可以影响到的最远的点

那么sum[i + e[i]] - sum[i] 即是能影响到的人数

这里需要用到贪心思想 即把影响最大的点用加速器

代码

#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 10010
int n,m,k,ans;
int need[maxn],tim[maxn],from[maxn],to[maxn],sum[maxn],last[maxn],mintime[maxn],e[maxn];
void fast(int x)
{
while(x--)//枚举加速器
{
e[n]=e[n-]=n;//每次都初始化影响点
int now,Max=-;//now为影响最大的点
for(int i=n-;i>=;i--)//从后面推回去
{
if(mintime[i+]<=last[i+]) e[i]=i+;//如果要等待 最多影响到下一个
else e[i]=e[i+];//如果不用等待 就会影响到后面的
}
for(int i=;i<n;i++)//枚举边
{
int temp=sum[e[i]]-sum[i];//枚举影响
if(temp>Max&&need[i]>)//找出最大影响和位置 并且时间要大于1
{
Max=temp;
now=i;
}
}
ans-=Max;//答案减去影响到的人数
need[now]--;//加速的时间减去
for(int i=;i<=n;i++) mintime[i]=max(mintime[i-],last[i-])+need[i-];//重新计算每个点的最短时间
}
}
int main()
{
cin>>n>>m>>k;
for(int i=;i<n;i++) cin>>need[i];
for(int i=;i<=m;i++)
{
cin>>tim[i]>>from[i]>>to[i];
last[from[i]]=max(last[from[i]],tim[i]);//此点的最迟时间为每个人从此点出发的最小值
sum[to[i]]++;//在to[i]下车的人数+1
}
mintime[]=last[];//第一个点初始化
for(int i=;i<=n;i++) sum[i]+=sum[i-]; //前缀和
for(int i=;i<=n;i++) mintime[i]=max(mintime[i-],last[i-])+need[i-];//计算到达每个点所需要的最短时间
//最后一个人到前一个站点的时间和到这个点的时间取max
for(int i=;i<=m;i++) ans+=mintime[to[i]]-tim[i];//计算没有用加速器的答案 后面再减去用加速器的时间
fast(k);//加速辣
cout<<ans;
}

【题解】洛谷P1315 [NOIP2011TG] 观光公交(前缀和+贪心)的更多相关文章

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

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

  2. 【题解】洛谷P1311 [NOIP2011TG] 选择客栈(递推)

    题目来源:洛谷P1311 思路 纯暴力明显过不了这道题 所以我们要考虑如何优化到至多只能到nlogn 但是我们发现可以更优到O(n) 我们假设我们当前寻找的是第二个人住的客栈i 那么第一个人住的客栈肯 ...

  3. 【题解】洛谷P1313 [NOIP2011TG]计算系数(组合+二次项展开)

    洛谷P1313:https://www.luogu.org/problemnew/show/P1313 思路 本题就是考查二次项展开 根据定理有:(ax+by)k=∑ki=0Cik*aibk-ixiy ...

  4. 题解 洛谷P5018【对称二叉树】(noip2018T4)

    \(noip2018\) \(T4\)题解 其实呢,我是觉得这题比\(T3\)水到不知道哪里去了 毕竟我比较菜,不大会\(dp\) 好了开始讲正事 这题其实考察的其实就是选手对D(大)F(法)S(师) ...

  5. 题解 洛谷P2158 【[SDOI2008]仪仗队】

    本文搬自本人洛谷博客 题目 本文进行了一定的更新 优化了 Markdown 中 Latex 语句的运用,加强了可读性 补充了"我们仍不曾知晓得 消失的 性质5 ",加强了推导的严谨 ...

  6. 题解 洛谷 P3396 【哈希冲突】(根号分治)

    根号分治 前言 本题是一道讲解根号分治思想的论文题(然鹅我并没有找到论文),正 如论文中所说,根号算法--不仅是分块,根号分治利用的思想和分块像 似却又不同,某一篇洛谷日报中说过,分块算法实质上是一种 ...

  7. 题解-洛谷P7114 字符串匹配

    题面 洛谷P7114 字符串匹配 \(T\) 组测试数据.给定字符串 \(S\),问有多少不同的非空字符串 \(A\),\(B\),\(C\) 满足 \(S=ABABAB...ABC\) 且 \(A\ ...

  8. 题解-洛谷P6788 「EZEC-3」四月樱花

    题面 洛谷P6788 「EZEC-3」四月樱花 给定 \(n,p\),求: \[ans=\left(\prod_{x=1}^n\prod_{y|x}\frac{y^{d(y)}}{\prod_{z|y ...

  9. 题解-洛谷P5410 【模板】扩展 KMP(Z 函数)

    题面 洛谷P5410 [模板]扩展 KMP(Z 函数) 给定两个字符串 \(a,b\),要求出两个数组:\(b\) 的 \(z\) 函数数组 \(z\).\(b\) 与 \(a\) 的每一个后缀的 L ...

随机推荐

  1. MyBaits_查询缓存02_Ehcache二级缓存

    一.Ehcache二级缓存的开启 导入jar(https://github.com/mybatis/ehcache-cache/releases) <cache type="org.m ...

  2. AndroidVideoCache 框架源码分析

    1.简析: 在客户端播放视频的使用,容易出现这样的一个问题.在网络状况不好的情况下,视频流很容易卡顿或者中断,即使播放软件本身有一点的缓存能力,但是这个往往不够,造成播放失败,卡顿. AndroidV ...

  3. poj 1141 Brackets Sequence ( 区间dp+输出方案 )

    http://blog.csdn.net/cc_again/article/details/10169643 http://blog.csdn.net/lijiecsu/article/details ...

  4. C Primer Plus note8

    error: too few arguments to function 'imax'| 运行上面的代码,产生了下面的错误: 中文翻译是:函数imax()中的参数太少. 查看imax()函数声明,发现 ...

  5. Effective C++ .05 一些不自动生成copy assigment操作的情况

    主要讲了 1. 一般情况下编译器会为类创建默认的构造函数,拷贝构造函数和copy assignment函数 2. 执行默认的拷贝构造/copy assignment函数时,如果成员有自己的拷贝构造/c ...

  6. 一个对inner jion ...on 的sql多表联合查询的练习

    create database practiceSql; use practiceSql; -- create table student( `id` bigint not null auto_inc ...

  7. Android--Otto事件总线 -- 组件之间通讯框架使用 --模式解析

    前言:Otto事件总线 -- 组件之间通讯框架 对于之前的情况activity之间或者fragment之间等跳转传值一般都是用bundle.intent等,从activityA --- activit ...

  8. 【Udacity】解决:字幕遮挡视频内容怎么办?Udacity字幕大小调整

    字幕有没有办法显示在最下方,否则把内容挡住了,根本看不清老师所指的内容 Chrome 的小插件,能方便地调节视频的字幕大小,譬如:Udacity 的学习视频字幕大小不能调节,有时候不想它占太多位置,而 ...

  9. 抓取windows系统进程

    最近在开发辅流分享界面,然后之前的windows编程的代码都忘记了,翻到了一个博客,具体的还是去msdn去查函数,这个是入门的链接如下: http://blog.csdn.net/zdragon200 ...

  10. Linux--sudo权限讲解

    sudo简介:sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等.这样不仅减少了root用户的登录 和管理时间,同 ...