【LG5017】[NOIP2018pj]摆渡车

题面

洛谷

题解

震惊!普及组竟然考斜率优化???

当然有其他的方法

首先我们转化一下模型

此题可以变为:

在一根时间轴上有一些点,每个时间点\(i\)有一个权值\(c_i\)(即在\(i\)开始等待人数,没有则为\(0\))

要求选一些时间点,每个时间点间隔不小于\(m\)

使得每个点的权值乘上它与第一个大于等于它时间的已选择的时间点到它的距离之和最小 感觉讲得好复杂

设\(dp[i]\)表示当我们强制选时间点\(i\)的最小值

则有转移方程\(dp[i]=\min{dp[j]+\sum_{k=j+1}^i{(i-k)*c_k}}\) \((\)\(0\)\(\leq\)\(j\)\(\leq\)\(i-m\)\()\)

次数直接转移的复杂度为\(O(n^3)\)

考虑怎么优化,设

\(sum1[i]=\sum_{j=0}^i{c_j}\)

\(sum2[i]=\sum_{j=0}^i{c_j*j}\)

然后方程化为\(dp[i]=\min dp[j]+i*sum1[i]-i*sum1[j]-sum2[i]+sum2[j]\) \((\)\(0\)\(\leq\)\(j\)\(\leq\)\(i-m\)\()\)

此时复杂度为\(O(n^2)\)

继续优化,此时用上斜率优化

去掉\(min\),则

\(dp[i]=dp[j]+i*sum1[i]-i*sum1[j]-sum2[i]+sum2[j]\)

移项得\(dp[j]+sum2[j]=i*sum1[j]+dp[i]-i*sum1[j]+sum2[i]\)

将\(dp[j]+sum2[j]\)视为\(y\)

将\(i\)视为\(k\)

将\(sum1[j]\)视为\(x\)

队列优化下凸壳即可

复杂度\(O(n)\)

代码

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <climits>
using namespace std;
#define MAX_T 4100000
int N, M, c[MAX_T];
int maxt, sum1[MAX_T], sum2[MAX_T];
int dp[MAX_T], q[MAX_T];
#define y(i) (dp[i] + sum2[i])
#define k(i) (i)
#define x(i) (sum1[i])
int main() {
cin >> N >> M;
for (int t, i = 1; i <= N; i++) cin >> t, c[t]++, maxt = max(maxt, t);
sum1[0] = c[0], sum2[0] = 0;
for (int i = 1; i < maxt + M; i++) {
sum1[i] = sum1[i - 1] + c[i];
sum2[i] = sum2[i - 1] + i * c[i];
}
int ans = INT_MAX;
int l = 1, r = 0;
for (int i = 0; i < maxt + M; i++) {
if (i - M >= 0) {
while (l < r && 1ll * (y(q[r]) - y(q[r - 1])) * (x(i - M) - x(q[r])) >=
1ll * (y(i - M) - y(q[r])) * (x(q[r]) - x(q[r - 1]))) -- r;
q[++r] = i - M;
}
while (l < r && 1ll * (y(q[l + 1]) - y(q[l])) <=
1ll * k(i) * (x(q[l + 1]) - x(q[l]))) ++l;
dp[i] = i * sum1[i] - sum2[i];
int j = q[l]; if (l <= r) dp[i] = min(dp[i], dp[j] + i * sum1[i] - i * sum1[j] - sum2[i] + sum2[j]);
}
for (int i = maxt; i < maxt + M; i++) ans = min(ans, dp[i]);
cout << ans << endl;
return 0;
}

【LG5017】[NOIP2018pj]摆渡车的更多相关文章

  1. [NOIP2018PJ]摆渡车

    [NOIP2018PJ]摆渡车 luogu mdPJ组这么难,还好考的TG组 先按t排序 设f[i][j]表示前i个人,第i个人等j分钟的最小总等待时间 这里j是小于2m的 可以考虑最坏情况下,一个人 ...

  2. [NOIP2018]摆渡车

    Description: 有 n 名同学要乘坐摆渡车从人大附中前往人民大学,第 i位同学在第 t 分钟去 等车.只有一辆摆渡车在工作,但摆渡车容量可以视为无限大.摆渡车从人大附中出发. 把车上的同学送 ...

  3. 【NOIP2018pj】题解

    [NOIP2018pj]题解 \(T1\) 题面 洛谷 题解 好像并没有什么好说的... #include <iostream> #include <cstdio> #incl ...

  4. 【LG5018】[NOIP2018pj]对称的二叉树

    [LG5018][NOIP2018pj]对称的二叉树 题面 洛谷 题解 看到这一题全都是用\(O(nlogn)\)的算法过的 考场上写\(O(n)\)算法的我很不开心 然后就发了此篇题解... 首先我 ...

  5. [NOIP2018PJ]对称二叉树

    [NOIP2018PJ]对称二叉树 这个题正常人看到题面难道不是哈希? 乱写了个树哈希... #include<bits/stdc++.h> using namespace std; co ...

  6. Luogu 5017 NOIP2018普及组T3 摆渡车 (斜率优化 + 必要的转移进行剪枝)

    题意: 有 n 名同学要乘坐摆渡车从人大附中前往人民大学,第 i 位同学在第 ti​ 分钟去 等车.只有一辆摆渡车在工作,但摆渡车容量可以视为无限大.摆渡车从人大附中出发. 把车上的同学送到人民大学. ...

  7. 『摆渡车 斜率优化dp及总结』

    摆渡车的题解我已经写过一遍了,在这里,这次主要从斜率优化的角度讲一下摆渡车,并总结一下斜率优化会出现的一些奇奇怪怪的错误. 摆渡车 Description 有 n 名同学要乘坐摆渡车从人大附中前往人民 ...

  8. [Noip 2018][标题统计 龙湖斗 摆渡车 对称二叉树]普及组题解

    啊喂,都已经9102年了,你还在想去年? 这里是一个Noip2018年PJ第二题打爆的OIer,错失省一 但经过了一年,我学到了很多,也有了很多朋友,水平也提高了很多,现在回看当时: 今年的Noip ...

  9. P5017 [NOIP2018 普及组] 摆渡车

    P5017 [NOIP2018 普及组] 摆渡车 题目 P5017 思路 将实际问题抽象后,不难发现这是一个 区间 \(DP\) 我们不妨认为时间是一条数轴,每名同学按照到达时刻分别对应数轴上可能重合 ...

随机推荐

  1. iOS-建设银行破解分享

    https://i.cnblogs.com/Files.aspx 建设银行破解分享 问题描述一• 在越狱手机上控制银行客户端自动获取流水,并发送到服务器. 问题描述二• 怎么控制 • 通过在越狱手机上 ...

  2. 【NOIP2017】宝藏

    题目描述 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 \(n\) 个深埋在地下的宝藏屋, 也给出了这 \(n\) 个宝藏屋之间可供开发的 \(m\) 条道路和它们的长度. 小明决心亲自前往挖掘 ...

  3. 贪心——HDU-5969 最大的位或

    HDU-5969:http://acm.hdu.edu.cn/showproblem.php?pid=5969 一开始也是分了类,觉得要两种情况,l 与 r 位数相同与不同的情况,仔细想一下,可以一起 ...

  4. Mysql 创建普通用户、数据库、表、插入记录,用户赋权

    C:\phpStudy\MySQL\bin>mysql -uroot -proot -h127.0.0.1 //创建用户 mysql> insert into mysql.user (ho ...

  5. centos上nginx的安装

    安装步骤:   1.下载nginx,执行:wget http://nginx.org/download/nginx-1.10.2.tar.gz 2.解压,执行:tar vxzf nginx-1.10. ...

  6. jenkins持续集成工作原理

    转载https://www.cnblogs.com/liyuanhong/p/6548925.html 片段 这里是选择Gitlab作为git server.Gitlab的功能和Github差不多,但 ...

  7. CodeForces - 999D Equalize the Remainders (模拟+set)

    You are given an array consisting of nn integers a1,a2,…,ana1,a2,…,an , and a positive integer mm . ...

  8. dataFrame 切片操作

    loc——通过行标签索引行数据 # iloc——通过行号索引行数据 # ix——通过行标签或者行号索引行数据(基于loc和iloc 和at 和iat 的混合) # 同理,索引列数据也是如此! # : ...

  9. nRF5 SDK for Mesh(二) Getting started 快速开始

    Getting started To get started, take a look at the Light switch demo. It shows how a simple applicat ...

  10. npm run dev启动项目报错 Cannot find module 'webpack-cli/bin/config-yargs'

    一般是webpack的版本和webpackserver的版本不兼容导致的错误. 解决方法是先卸载这两个版本,再安装指定的版本. 卸载: 再安装指定或者最新版本的webpack和webpack-dev- ...