次元传送门:洛谷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. 前端js动画收藏

    值得收藏的动画

  2. Tomcat服务器使用(二)

    1. 打包Javaweb应用 当开发人员在自己的开发机器上调试所有代码并通过后,为了进行产品发布,都需要将开发人员的源码打包成war包进行发布.之前已经了解了jar包,那么war包和jar包的区别是什 ...

  3. 中南oj 1216: 异或最大值 数据结构

    1216: 异或最大值 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 98  Solved: 29 [Submit][Status][Web Boar ...

  4. Windows API编程----枚举系统进程

    1.该函数可以检索系统中的每个进程的标识符(进程ID) BOOL WINAPI EnumProcesses( _Out_ DWORD *pProcessIds, _In_  DWORD cb, _Ou ...

  5. Maven 安装与使用(一)

    1. 安装 参考:http://maven.apache.org/install.html A. win7环境下,官网下载maven安装文件 B. 解压缩maven文件 C. 确认已配置好JAVA环境 ...

  6. arm汇编学习(五)

    新增个手写GNU语法arm的方法,以后可以狂逆狂写 hello.S文件 .data msg: .ascii "Hello, ARM!\n" len = . - msg .text ...

  7. java面试题之----jdbc中使用的设计模式(桥接模式)

    1.JDBC(JavaDatabase Connectivity) JDBC是以统一方式访问数据库的API. 它提供了独立于平台的数据库访问,也就是说,有了JDBC API,我们就不必为访问Oracl ...

  8. keepalived+MySQL双主搭建

    keepalived+MySQL双主搭建过程 首先要简单了解一下keepalived: Keepalived是Linux下一个轻量级别的高可用解决方案.高可用(High Avalilability,H ...

  9. svn环境搭建

    (一)svn介绍   项目管理中的版本控制问题 通常软件开发由多人协作开发,如果对代码文件.文档等没有进行版本控制,将会出现很多问题: 备份多个版本,占用磁盘空间大 解决代码冲突困难 容易引发BUG ...

  10. compositionstart事件与compositionend事件

    https://blog.csdn.net/u013096088/article/details/52873562