P3580 [POI2014]ZAL-Freight(单调队列dp)

考虑两辆车怎么样是最优的。

t1,t2,St_1,t_2,St1​,t2​,S

t1+St_1+St1​+S

第一辆车:[t1,t1+S][t_1,t_1+S][t1​,t1​+S]

假设第二辆车在某个时间ti∈[t1+1,t1+S]t_i\in [t_1+1,t_1+S]ti​∈[t1​+1,t1​+S]出发。

在第一辆车到达到右端点后,必须等第一辆车过来才能继续接下来的行动。

所以第二辆车到达的时间是:ti+St_i+Sti​+S。

此时第一辆车和第二辆车在右端点。

此时是回程是对称的,只不过是出发时间不同。

所以我们只需考虑往程最优即可。

因为相邻辆车至少间隔111min,所以显然在ti=t1+1t_i=t_1+1ti​=t1​+1出发时最优的。

此时能最早到达。

因此考虑dpdpdp转移。
fi=min(fi,max(ai,fj+i−j−1)+2×S+i−j−1)\large f_i=min(f_i,max(a_i,f_j+i-j-1)+2\times S+i-j-1) fi​=min(fi​,max(ai​,fj​+i−j−1)+2×S+i−j−1)
先去掉maxmaxmax。

分情况讨论:fj+i−j−1≥aif_j+i-j-1\ge a_ifj​+i−j−1≥ai​

即:fj−j≥ai−i+1\large f_j-j\ge a_i-i+1fj​−j≥ai​−i+1​。

因为i,Si,Si,S​是定值,所以单调队列维护维护fj−jf_j-jfj​−j的最小值即可。​​

答案为:fj+2×(S+i−j−1)f_j+2\times (S+i-j-1)fj​+2×(S+i−j−1)

否则:fj−j<ai−i+1f_j-j<a_i-i+1fj​−j<ai​−i+1。

答案就是:ai+2×S+i−j+1a_i+2\times S+i-j+1ai​+2×S+i−j+1。

此时的jjj​就是单调队列最后一次弹出的位置。

时间复杂度:O(n)O(n)O(n)

// Problem: P3580 [POI2014]ZAL-Freight
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P3580
// Memory Limit: 125 MB
// Time Limit: 1000 ms
// Date: 2021-07-26 19:24:10
// --------by Herio--------#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=1e6+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a,b) memset(a,b,sizeof a)
#define PII pair<int,int>
#define fi first
#define se second
#define pb emplace_back
#define SZ(a) (int)a.size()
#define IOS ios::sync_with_stdio(false),cin.tie(0)
void Print(int *a,int n){for(int i=1;i<n;i++)printf("%d ",a[i]);printf("%d\n",a[n]);
}
int n;
ll s,f[N],a[N];
int q[N],l=1,r;
int main(){scanf("%d%lld",&n,&s);a[0]=-1;for(int i=1;i<=n;i++) scanf("%lld",&a[i]),a[i]=max(a[i],a[i-1]+1);for(int i=1;i<=n;i++){while(l<=r&&f[q[l]]-q[l]<a[i]-i+1) l++;f[i]=a[i]+2*s+i-q[l-1]-1;f[i]=min(f[i],f[q[l]]+2*(s+i-q[l]-1));while(l<=r&&f[q[r]]-2*q[r]>f[i]-2*i) r--;q[++r]=i;}printf("%lld\n",f[n]);return 0;
}

P3580 [POI2014]ZAL-Freight(单调队列dp)相关推荐

  1. bzoj1791,P4381-[IOI2008]Island【基环树,树形dp,单调队列dp,树的直径】

    正题 评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P4381 题目大意 有n个岛,n条无向边(保证每个岛都有边连到).走过 ...

  2. 刷题总结——烽火传递(单调队列+dp)

    题目: 题目描述 烽火台又称烽燧,是重要的防御设施,一般建在险要处或交通要道上.一旦有敌情发生,白天燃烧柴草,通过浓烟表达信息:夜晚燃烧干柴,以火光传递军情.在某两座城市之间有 n 个烽火台,每个烽火 ...

  3. POJ 1821 单调队列+dp

    题目大意:有K个工人,有n个墙,现在要给墙涂色.然后每个工人坐在Si上,他能刷的最大范围是Li,且必须是一个连续子区间,而且必须过Si,他刷完后能获得Pi钱 思路:定义dp[i][j]表示前i个人,涂 ...

  4. P3957-跳房子【单调队列,dp,二分】

    前言 链接: https://www.luogu.org/record/show?rid=7915892 这就是之前普及组的第四题- 大意 有n个格子,每个格子有价值.机器人有固定的跳跃距离d,用k个 ...

  5. BZOJ 1791 岛屿(环套树+单调队列DP)

    题目实际上是求环套树森林中每个环套树的直径. 对于环套树的直径,可以先找到这个环套树上面的环.然后把环上的每一点都到达的外向树上的最远距离作为这个点的权值. 那么直径一定就是从环上的某个点开始,某个点 ...

  6. codeforces - 1216F WIFI(单调队列+DP)

    传送门 题意:有n个房间,需要把n个房间全部连上网,可以使用i的代价直接将第i个房间连上网.有一些房间可以放路由器,代价也是他的标号i,路由器可以使得i-k,到i+k之间所有房间通上网,求最小代价使得 ...

  7. Codeforces Round #466 (Div. 2): E. Cashback(单调队列+DP)

    题目链接:http://codeforces.com/contest/940/problem/E 题意:给你一个长为n的序列和一个数字c,你要将这个序列切成若干段,对于每一段,这段中最小的[n/c]个 ...

  8. 【BZOJ3831】[Poi2014]Little Bird 单调队列

    [BZOJ3831][Poi2014]Little Bird Description In the Byteotian Line Forest there are   trees in a row. ...

  9. 【CF940E】Cashback(单调队列dp)

    传送门 Solution: 既然是删掉k/c个,那么k<c是不删除的无意义,k=c删除1个,c<=k<2c还是删除1个,那么相当于第c+1个到第k个放在上一区间是无意义的.证明:假如 ...

最新文章

  1. 移动IM开发指南3:如何优化登录模块
  2. django--favicon.ico
  3. docker笔记-docker-container
  4. cookie和session的理解
  5. Golang CSP并发模型
  6. 【IdentityServer4文档】- 欢迎来到 IdentityServer4
  7. SAP CRM Service Order(服务订单)的状态字段设计原理介绍
  8. Bootstrap3 插件的版本号
  9. vue下拉框传值问题
  10. 高并发服务器开源项目,高并发服务器框架详解 - osc_qgfjs4a5的个人空间 - OSCHINA - 中文开源技术交流社区...
  11. python class 2
  12. Linux下查杀进程的方法说明
  13. radius源码下载
  14. CSS border 属性
  15. 在Adobe Premiere Pro for Mac上使用合并剪辑同步音频和视频
  16. 最新IP数据库 号段归属地 省市区镇行政区划
  17. 【React】React Fiber
  18. 用Java实现的eChat聊天服务器
  19. bilibili缓存文件在哪里_2020年最新最全实现转换bilibili的m4s为MP4的画质无损教程 专治各种不服!...
  20. pic16F877A音乐盒c语言,基于PIC16F877A单片机的混沌信号发生器的设计

热门文章

  1. python内置类属性 __dict__ __name__ __module__ __doc__ __bases__
  2. 在 JavaScript 中按字母顺序排序 - 如何在 JS 中按名称排序
  3. iOS获取视频文件大小和时长
  4. 基于RTSP的流媒体播放器制作(2)
  5. 支持他们的应用程序突袭Cloudberry狂潮
  6. 鸿蒙系统网络连接设置ip,G1 IP话机网络配置和话机设置
  7. 在内卷如此严重的当下,大二小伙逆流而上,首次参加校招成功拿到网易实习offer
  8. iOS开发之模仿qq通讯录
  9. 热风枪概述和使用方法
  10. 解决:dockerd: failed to start daemon: Devices cgroup isn‘t mounted