次元传送门:洛谷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;
}

最新文章

  1. 对偶SVM
  2. Oracle函数之LISTAGG
  3. 简单几步把LOGO变字体
  4. 【UOJ #20】【NOIP 2014】解方程
  5. ios delegate你必须知道的事情
  6. 通过驱动向打印机发送一段(ESC)控制指令
  7. 安全增强 Linux (SELinux) 剖析
  8. Android 进阶 Fragment 介绍和使用 (一)
  9. jquery绑定事件失效的情况(转)
  10. 嵌入式系统图形库GUI核心模块介绍
  11. Sina App Engine(SAE)入门教程(3)-KVDB使用
  12. .Net学前入门
  13. Binwalk的安装和使用
  14. NOIP算法小结(转载)
  15. qt 窗口鼠标穿透
  16. 软件工程(GZSD2015) 第二次作业小结
  17. R 544
  18. js学习笔记23----窗口尺寸及窗口事件
  19. Java内存缓存
  20. runtime总结 iOS

热门文章

  1. 【转】spring boot使用Druid和监控配置
  2. springboot1.5.10兼容高版本6.1.1elasticsearch
  3. 官网下载apache服务器并运行
  4. 洛谷P1155 双栈排序(贪心)
  5. react+javascript前端进阶
  6. 使用Calendar加一天,减一天
  7. [小北De编程手记] : Lesson 05 - Selenium For C# 之 API 下
  8. 一、CSS实现横列布局的方法总结
  9. python numpy+mkl+scipy win64 安装
  10. html 表单button