[NOIP2018(PJ)] 摆渡车
题意
有 $n$ 个同学在等车,每位同学从某时刻开始等车,相邻两趟车之间至少间隔 $m$ 分钟。凯凯可以任意安排发车时间,求所有同学等车时间之和的最小值。
分析
这题首先能想到是动态规划
很明显先要对每个人开始等待的时间进行排序
如果设 $f[i]$ 为前 $i$ 个人都已离开的最少等车时间,由于这样做发车时间与每个人上车时间不好确定,所以考虑加一维
设 $f[i][j]$ 为第 $i$ 个人等待的第 $j$ 分钟时,前 $i$ 个人都已恰好离开时的最少等车时间之和
我们可以枚举 $i$ 和 $j$,同时对 $i$ 后面的同学的值进行更新
此时第 $k \, (k>i)$ 个人等车的时间 $now$ 为 $max(t[i]+j+m-t[k],0)$
所以 $f[k][now]=f[i][j]+\sum\limits_{x=i+1}^k (now+t[k]-t[x])$
但是求和又会增加一维时间复杂度,于是可以先预处理出 $t[i]$ 的前缀和 $s[i]$
然后 $f[k][now]=f[i][j]+(now+t[k]) \times (k-i)-(s[k]-s[i])$
最后在 $n$ 位同学都已离开的情况中找出最小值
时间复杂度为 $O(n^2 m)$,但实际上要比这个小很多
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define N 505 int n, m, ans = inf;
int t[N], s[N], f[N][N]; int main() {
scanf("%d%d", &n, &m);
for (int i = ; i <= n; i++)
scanf("%d", t + i);
sort(t + , t + n + );
for (int i = ; i <= n; i++)
s[i] = s[i - ] + t[i];
t[] = -inf;
memset(f, 0x3f, sizeof f);
f[][] = ;
for (int i = ; i <= n; i++) {
int mj = min(m - , t[i + ] - t[i]);
for (int j = ; j <= mj; j++)
if (f[i][j] != inf)
for (int k = ; i + k <= n; k++) {
int now = max(t[i] + j + m - t[i + k], );
f[i + k][now] = min(f[i + k][now],
f[i][j] + (t[i + k] + now) * k - (s[i + k] - s[i]));
}
}
for (int i = ; i < m; i++)
ans = min(ans, f[n][i]);
printf("%d\n", ans); return ;
}
[NOIP2018(PJ)] 摆渡车的更多相关文章
- NOIp2018 pj 滚粗记
NOIp2018 pj 滚粗记 考前 一个午觉睡完就到了考场 考中 \(T1\)水题切了 \(T2\)水题切了 \(T3\)好像是\(dp\),不会,先跳 \(T4\)像树上莫队一样,然后再欧拉序上面 ...
- 「洛谷5017」「NOIP2018」摆渡车【DP,经典好题】
前言 在考场被这个题搞自闭了,那个时候自己是真的太菜了.qwq 现在水平稍微高了一点,就过来切一下这一道\(DP\)经典好题. 附加一个题目链接:[洛谷] 正文 虽然题目非常的简短,但是解法有很多. ...
- [NOIP2018 PJ T4]对称二叉树
题目大意:问一棵有根带权二叉树中最大的对称二叉树子树,对称二叉树为需满足将这棵树所有节点的左右子树交换,新树和原树对应位置的结构相同且点权相等. 题解:在对称二叉树中,对于深度相同的两个节点$u,v$ ...
- [Noip2018普及]摆渡车
生涯回忆录彻底摸了...反正也没啥人看( 过几天要给普及组神犇讲课就寻思做一点普及题,然后差点被锤爆,, 题在luogu上找的https://www.luogu.org/problemnew/show ...
- 「学习笔记」动态规划 I『初识DP』
写在前面 注意:此文章仅供参考,如发现有误请及时告知. 更新日期:2018/3/16,2018/12/03 动态规划介绍 动态规划,简称DP(Dynamic Programming) 简介1 简介2 ...
- 【游记】CSp2020
同步发表于洛谷博客 初赛 Day -2 做了个模拟(非洛谷),只有一丁点分,显然过不了 (盗张 i am ak f 的图) Day 0 颓,颓,颓,又做了一套模拟,坚定了退役的信心. Day 1 人好 ...
- 我的获奖记录及 Important Dates in OI
逊逊的获奖记录/ruo(真的没拿过啥奖,并且大部分都集中在初三阶段,即 2020-2021 赛季): NOIP2018 pj,1=,无游记 CSP-S2019,1=,无游记 APIO2020,Ag,游 ...
- P5017 [NOIP2018 普及组] 摆渡车
P5017 [NOIP2018 普及组] 摆渡车 题目 P5017 思路 将实际问题抽象后,不难发现这是一个 区间 \(DP\) 我们不妨认为时间是一条数轴,每名同学按照到达时刻分别对应数轴上可能重合 ...
- [NOIP2018]摆渡车
Description: 有 n 名同学要乘坐摆渡车从人大附中前往人民大学,第 i位同学在第 t 分钟去 等车.只有一辆摆渡车在工作,但摆渡车容量可以视为无限大.摆渡车从人大附中出发. 把车上的同学送 ...
随机推荐
- SpringCloud(一)
什么是SpringCloud? Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总线.负载均 ...
- Android日期时间控件DatePickerDialog和TimePickerDialog
1.DatePickerDialog 在一些万年历.日程表等APP上我们经常可以看到日期选择控件,由于很少有用户会老老实实的手工输入日期,所以该控件的作用就是为了控制用户的输入格式,在Android中 ...
- JAVA8List排序,(升序,倒序)
List<Integer> integerList = Arrays.asList(4, 5, 2, 3, 7, 9); List<Integer> collect = int ...
- win10修改jupyter notebook默认路径
安装anaconda3 ,因此自带jupyter notebook 发送到jupyter notebook到桌面快捷方式 右击属性,将目标的%USERPROFILE%,修该为自己需要的路径 起始位置修 ...
- Joomla 3.0.0 --> 3.4.6-RCE复现
Joomla是一款网站管理系统CMS,最近曝出其3.00-3.4.6的joomla版本存在一个RCE漏洞. 并且大佬已将exp放在了github上,下载地址:https://www.exploit-d ...
- springMVC请求访问的整个过程
//以上个随笔(springMVC项目配置文件)为基础,详述springMVC请求的整个过程流向 web.xml ...
- P1462 通往奥格瑞玛的道路【二分+Dij】
P1462 通往奥格瑞玛的道路 提交 29.89k 通过 6.88k 时间限制 1.00s 内存限制 125.00MB 题目提供者gconeice 难度提高+/省选- 历史分数100 提交记录 查看题 ...
- Python学习笔记三:数据特征分析
完成数据清理后,下面通过图表展开对数据的分析. 1.前期初判(分布分析): 1)判断分组区间: # a.散点图:plt.scatter(data[字段1],data['字段2'], s = data[ ...
- LeetCode longest substring without repeating characters 题解 Hash表
题目 Given a string, find the length of the longest substring without repeating characters. Example 1: ...
- k8s获取apiversion下面的对应可用资源
1- 获取api命令 [注:以下命令的url地址http://127.0.0.1/为k8s master的地址] kubectl api-versions 输出内容如下: apps/v1beta1 a ...