要点

  • 较好的思路解析
  • \(dp[i]\)为到达\(i\)花费的最短时间,\(dis[i]-dis[j]<=lim1\)的情况其实可以省略,因为就相当于没买咖啡,绝对不优于在那之前的某店买了咖啡并发挥效用;\(lim1<dis[i]-dis[j]<lim0\)可以用一个队列维护在范围内的点,用单增的队列就可以之间取队头,注意维护时相等也要入队,因为往后滑动窗口时如果第一个被淘汰了,第二个却可能合法;\(dis[i]-dis[j]>=lim0\),因为是从头开始在距离上都合法所以不需要队列滑动,只要用变量维护最值即可。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std; typedef long long ll;
typedef double db;
const int maxn = 5e5 + 5;
const db eps = 1e-8; ll L;
int a, b, t, r, n;
int pre[maxn];
ll dis[maxn];
db dp[maxn];
db val[maxn]; int dcmp(db x) {
if (fabs(x) < eps) return 0;
return x > 0 ? 1 : -1;
} void print(int i, int cnt) {
if (!i) {
cout << cnt << '\n';
return;
}
print(pre[i], cnt + 1);
cout << i - 1 << " ";
} int main() {
ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0); cin >> L >> a >> b >> t >> r >> n;
for (int i = 1; i <= n; i++) {
cin >> dis[i];
}
dis[++n] = L; ll lim0 = t * a + r * b;
ll lim1 = t * a;
int j = 1, k = 1;
db rej = 1e18;
int idj = 0;
int Q[maxn], head = 1, tail = 0; for (int i = 1; i <= n; i++) {
dp[i] = (db)dis[i] / a; while (j < i && dis[i] - dis[j] >= lim0) {
db tmp = dp[j] - (db)dis[j] / a;
if (dcmp(tmp - rej) < 0) {
rej = tmp;
idj = j;
}
j++;
}
if (idj) {
db tmp = rej + (db)(dis[i] - lim0) / a + t + r;
if (dcmp(dp[i] - tmp) > 0) {
dp[i] = tmp;
pre[i] = idj;
}
} while (k < i && dis[i] - dis[k] >= lim1) {
val[k] = dp[k] - (db)dis[k] / b;
while (head <= tail && dcmp(val[Q[tail]] - val[k]) > 0) tail--;
Q[++tail] = k++;
}
while (head <= tail && dis[i] - dis[Q[head]] >= lim0) head++;
if (head <= tail) {
db tmp = val[Q[head]] + (db)(dis[i] - lim1) / b + t;
if (dcmp(dp[i] - tmp) > 0) {
dp[i] = tmp;
pre[i] = Q[head];
}
}
} print(pre[n], 0);
}

GYM 101572A(单调队列优化dp)的更多相关文章

  1. 单调队列优化DP,多重背包

    单调队列优化DP:http://www.cnblogs.com/ka200812/archive/2012/07/11/2585950.html 单调队列优化多重背包:http://blog.csdn ...

  2. bzoj1855: [Scoi2010]股票交易--单调队列优化DP

    单调队列优化DP的模板题 不难列出DP方程: 对于买入的情况 由于dp[i][j]=max{dp[i-w-1][k]+k*Ap[i]-j*Ap[i]} AP[i]*j是固定的,在队列中维护dp[i-w ...

  3. hdu3401:单调队列优化dp

    第一个单调队列优化dp 写了半天,最后初始化搞错了还一直wa.. 题目大意: 炒股,总共 t 天,每天可以买入na[i]股,卖出nb[i]股,价钱分别为pa[i]和pb[i],最大同时拥有p股 且一次 ...

  4. Parade(单调队列优化dp)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2490 Parade Time Limit: 4000/2000 MS (Java/Others)    ...

  5. BZOJ_3831_[Poi2014]Little Bird_单调队列优化DP

    BZOJ_3831_[Poi2014]Little Bird_单调队列优化DP Description 有一排n棵树,第i棵树的高度是Di. MHY要从第一棵树到第n棵树去找他的妹子玩. 如果MHY在 ...

  6. 【单调队列优化dp】 分组

    [单调队列优化dp] 分组 >>>>题目 [题目] 给定一行n个非负整数,现在你可以选择其中若干个数,但不能有连续k个数被选择.你的任务是使得选出的数字的和最大 [输入格式] ...

  7. [小明打联盟][斜率/单调队列 优化dp][背包]

    链接:https://ac.nowcoder.com/acm/problem/14553来源:牛客网 题目描述 小明很喜欢打游戏,现在已知一个新英雄即将推出,他同样拥有四个技能,其中三个小技能的释放时 ...

  8. 单调队列以及单调队列优化DP

    单调队列定义: 其实单调队列就是一种队列内的元素有单调性的队列,因为其单调性所以经常会被用来维护区间最值或者降低DP的维数已达到降维来减少空间及时间的目的. 单调队列的一般应用: 1.维护区间最值 2 ...

  9. BZOJ1791[Ioi2008]Island 岛屿 ——基环森林直径和+单调队列优化DP+树形DP

    题目描述 你将要游览一个有N个岛屿的公园.从每一个岛i出发,只建造一座桥.桥的长度以Li表示.公园内总共有N座桥.尽管每座桥由一个岛连到另一个岛,但每座桥均可以双向行走.同时,每一对这样的岛屿,都有一 ...

  10. P4381 [IOI2008]Island(基环树+单调队列优化dp)

    P4381 [IOI2008]Island 题意:求图中所有基环树的直径和 我们对每棵基环树分别计算答案. 首先我们先bfs找环(dfs易爆栈) 蓝后我们处理直径 直径不在环上,就在环上某点的子树上 ...

随机推荐

  1. 分享知识-快乐自己:Oracle中定义及使用同义词

    Oracle 同义词概念: Oracle的同义词(synonyms)从字面上理解就是别名的意思,和视图的功能类似,就是一种映射关系. 它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别; ...

  2. C#多线程学习 之 线程池[ThreadPool]

    在多线程的程序中,经常会出现两种情况: 一种情况:   应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应                   这一般使用ThreadPo ...

  3. Java微信公众平台开发_05_微信网页授权

    GitHub源码:https://github.com/shirayner/weixin_gz 一.本节要点 1.网页授权回调域名 登录微信公众平台后台, 开发 - 接口权限 - 网页服务 - 网页帐 ...

  4. Codeforces Round #394 (Div. 2) 题解

    无需吟唱,直接传送 problem A 题目大意 已知有n个偶数,m个奇数,问这些数有没有可能组成一个严格递增1的序列 题解 判断abs(n,m) <= 1即可,注意n,m均为0的情况. Cod ...

  5. codevs 1576最长严格上升子序列

    传送门 1576 最长严格上升子序列  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold   题目描述 Description 给一个数组a1, a2 ... an ...

  6. 【Lintcode】062.Search in Rotated Sorted Array

    题目: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7  ...

  7. arm裸机程序启动流程

    arm裸机程序启动流程 1373 Linux系统的引导: 一个SOC拿过来,它是有内部BROM和SRAM的,这个BROM中会固化芯片厂商的最初引导代码,我们叫它RBL(ROM boot loader) ...

  8. Iptables防火墙面试题

    Iptables防火墙面试题 第1章 (一)基础口试题 1.1 详述 iptales 工作流程以及规则过滤顺序? 1.防火墙是一层层过滤的.实际是按照配置规则的顺序从上到下,从前到后进行过滤的. 2. ...

  9. 在python 3.6的eclipse中,导入from lxml import etree老是提示,Unresolved import:etree的错误

    支持代码运行没问题,暂时没有找到真正解决办法,只能通过一下办法暂时解决.如下图:

  10. java——static声明方法注意事项

    在使用 static 类型声明的方法时需要注意的是:如果在类中声明了一 static类型的属性,则此属性既可以在非 static 类型的方法中使用,也可以在 static类型的方法中使用.但用 sta ...