[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 分钟去 等车.只有一辆摆渡车在工作,但摆渡车容量可以视为无限大.摆渡车从人大附中出发. 把车上的同学送 ...
随机推荐
- 2、Hdfs架构设计与原理分析
文章目录 1.Hadoop架构 2.HDFS体系架构 2.1NameNode 2.1.1元数据信息 2.1.2NameNode文件操作 2.1.3NameNode副本 2.1.4NameNode心跳机 ...
- Spark学习之路 (五)Spark伪分布式安装[转]
JDK的安装 JDK使用root用户安装 上传安装包并解压 [root@hadoop1 soft]# tar -zxvf jdk-8u73-linux-x64.tar.gz -C /usr/local ...
- pip 更换镜像源
国内的pip源 阿里云:https://mirrors.aliyun.com/pypi/simple/ 清华:https://pypi.tuna.tsinghua.edu.cn/simple 中国科技 ...
- hdu 6182A Math Problem(快速幂)
You are given a positive integer n, please count how many positive integers k satisfy kk≤nkk≤n. Inp ...
- gulp 对js\css进行md5 加密
有的服务器为了网站加载速度,会做服务器缓存,这样就会出现代码出现引用地址没变,新代码不生效,而我们又希望新代码可以及时生效,这样我们就需要避免缓存,当然也有很多方法,本文只介绍使用gulp-rev(对 ...
- [CF1304C] Air Conditioner
维护一区间 \([l,r]\) 人按照时间升序 考虑 \((l_i, h_i, t_i)\),当前的所有区间与这个区间取交 推到 \(t_{i+1}\) 时,所有区间的端点向两边扩张即可 注意把空掉的 ...
- 占位 RK
占位 RK include: RK403 RK404
- 《Vue.js实战》--推荐指数⭐⭐⭐⭐
献上pdf版本的百度网盘链接: https://pan.baidu.com/s/1YRwyR_ygW3tzBx1FbfjO1A 提取码: b255 先来看下目录: 看完这本书大概花了一个星期,走马观花 ...
- Python标准库之shutil模块
高级的文件.文件夹.压缩包处理模块. 文件复制 copyfileobj 将文件类对象 fsrc 的内容拷贝到文件类对象 fdst. shutil.copyfileobj(fsrc, fdst[, le ...
- 高级特征工程II
以下是Coursera上的How to Win a Data Science Competition: Learn from Top Kagglers课程笔记. Statistics and dist ...