洛谷P5017:摆渡车——题解
https://www.luogu.org/problem/P5017
参考:https://www.luogu.org/blog/ztyluogucpp/solution-p5017
我想我大概是废了。
肯定是要对$t$排序的。
最初想法肯定是$f[i]$表示前$i$个人全上车或到站的最小等待时间。
但你能够发现如果不给出上一班车的时间的话$f$根本转移不了。
那就$f[i][j]$表示最后一班车$j$时开出的最小等待时间?
数据范围打人脸,于是我就去查题解了。
但是我们发现实际上最后一班车开出的时间一定在$[t[i],t[i]+m)$之间,因为最差上一班车会在$t[i]-1$开出,$t[i]+m-1$回来,如果我们让车停在那里再开出显然会让乘客白等。
因此我们就可以改变$f[i][j]$为前$i$个人全上车或到站,最后一班车从$t[i]+j$时开出的最小等待时间。
状态转移方程可以很容易的写出:
$f[i][j]=min(f[i][j],f[k][l]+sum(k+1,i,t[i]+j))$(你得保证变量合法)
最终答案就是$min(f[n][0]\sim f[n][m-1])$
其中$sum(i,j,k)$函数表示第$i$人到第$j$人等时刻$k$发车的等待时间和,显然预处理前缀和就可以$O(1)$算了。
但是这个式子也是$O(n^2m^2)$过不了怎么办?
我们$j$的下限肯定是$max(t[k]+l+m-t[i],0)$的,但是真的有必要从这个下限枚举到$m-1$吗?
显然,到$i$上车时,比起让车等着,不如能早发就早发,所以虽然下限往上的状态$f$可能会错,但答案一定不会错。
因此没必要枚举$j$,复杂度$O(n^2m)$
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=;
const int M=;
const ll INF=1e18;
inline int read(){
int X=,w=;char ch=;
while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
while(isdigit(ch))X=(X<<)+(X<<)+(ch^),ch=getchar();
return w?-X:X;
}
ll t[N],s[N],f[N][M];
ll sum(int l,int r,ll now){
return now*(r-l+)-s[r]+s[l-];
}
int main(){
int n=read(),m=read();
for(int i=;i<=n;i++)t[i]=read();
sort(t+,t+n+);
for(int i=;i<=n;i++)s[i]=s[i-]+t[i];
for(int i=;i<=n;i++){
for(int j=;j<m;j++)f[i][j]=sum(,i,t[i]+j);
for(int j=;j<i;j++){
for(int k=;k<m;k++){
ll now=max(t[j]+k+m,t[i]);
f[i][now-t[i]]=min(f[i][now-t[i]],f[j][k]+sum(j+,i,now));
}
}
}
ll ans=INF;
for(int i=;i<m;i++)ans=min(ans,f[n][i]);
printf("%lld\n",ans);
return ;
}
+++++++++++++++++++++++++++++++++++++++++++
+本文作者:luyouqi233。 +
+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+
+++++++++++++++++++++++++++++++++++++++++++
洛谷P5017:摆渡车——题解的更多相关文章
- NOIp2018普及组T3暨洛谷P5017 摆渡车:题解
题目链接:https://www.luogu.org/problemnew/show/P5017 emm,这次的真的不简单的,T3比T4难? 醉了... 蒟蒻肯定没有其他大佬讲的好啊,但肯定尽力,真的 ...
- 洛谷P5017摆渡车
题目 一道做法多种多样的题,DP做法的状态也很多. 我用\(dp[i]\)表示在第i秒发车的时间和,然后dp方程就很好写了 \(dp[i] = dp[j] + i车的等待时间\)j属于i-2m ~ i ...
- 洛谷 P5017 摆渡车
题目传送门 解题思路: 个人感觉DP这东西,只可意会,不可言传 AC代码: #include<iostream> #include<cstdio> #include<cs ...
- 洛谷NOIp热身赛题解
洛谷NOIp热身赛题解 A 最大差值 简单树状数组,维护区间和.区间平方和,方差按照给的公式算就行了 #include<bits/stdc++.h> #define il inline # ...
- 洛谷P2827 蚯蚓 题解
洛谷P2827 蚯蚓 题解 题目描述 本题中,我们将用符号 ⌊c⌋ 表示对 c 向下取整. 蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓. 蛐蛐国里现 ...
- 洛谷P1816 忠诚 题解
洛谷P1816 忠诚 题解 题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人 ...
- [POI 2008&洛谷P3467]PLA-Postering 题解(单调栈)
[POI 2008&洛谷P3467]PLA-Postering Description Byteburg市东边的建筑都是以旧结构形式建造的:建筑互相紧挨着,之间没有空间.它们共同形成了一条长长 ...
- [NOI 2020 Online] 入门组T1 文具采购(洛谷 P6188)题解
原题传送门 题目部分:(来自于考试题面,经整理) [题目描述] 小明的班上共有 n 元班费,同学们准备使用班费集体购买 3 种物品: 1.圆规,每个 7 元. 2.笔,每支 4 元. 3.笔记本,每本 ...
- [洛谷P3948]数据结构 题解(差分)
[洛谷P3948]数据结构 Description 最开始的数组每个元素都是0 给出n,opt ,min,max,mod 在int范围内 A: L ,R ,X 表示把[l,R] 这个区间加上X(数组的 ...
- [CodePlus 2017 11月赛&洛谷P4058]木材 题解(二分答案)
[CodePlus 2017 11月赛&洛谷P4058]木材 Description 有 n棵树,初始时每棵树的高度为 Hi ,第 i棵树每月都会长高 Ai.现在有个木料长度总量为 S的订单, ...
随机推荐
- 个人项目-wc
个人项目-WC (C语言) 一.Github地址:https://github.com/Lin-J-F/WC 二.PSP表格 PSP2.1 Personal Software Process St ...
- ML-逻辑回归推导
认识 是一个经典的二元(y=0 或 y=1) 分类算法, 不是回归 输入特征还是线性回归, 输出是 [0,1] 的一个概率值, 其判别函数的形式为: \(P(y=1|x) = \frac {1}{1+ ...
- eclipse 搭建springboot项目pom.xml报错
1. 报错信息 2. 解决方法 在pom.xml文件中加入maven版本修改 <maven-jar-plugin.version>3.1.1</maven-jar-plugin.ve ...
- 《linux就该这么学》课堂笔记08 用户权限、特殊权限、隐藏权限、su、sudo
1.文件的读.写.执行权限可以简写为 r w x,亦可分别用数字4.2.1来表示 2.文件的特殊权限 2.1.SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限( ...
- Ubuntu 开发环境搭建教程
Ubuntu 开发环境搭建教程 本文原始地址:https://sitoi.cn/posts/18425.html 更新 sudo apt upgrade sudo apt update 生成本机密钥 ...
- sql字符转义
/** * sql 内的like % 代表一个或多个字符, _代表一个字符,这都是需要转义的 * @param s * @return */ public static String escapeSp ...
- 微软源码站点-C#编程指南
地址:https://referencesource.microsoft.com/#System.Web/HttpPostedFile.cs 微软的源码可以在这里看. ---------------- ...
- 视频合并时使用python批量修改文件名
不知道大家有没有遇到这样的情况,比如视频合并时文件名没有按照正常顺序排列,像这样 可见,文件名排序是乱的.这个样子合并出来的视频一定也是乱的.所以得想办法把文件名修改一下,让软件读取出正确的顺序.闲话 ...
- 【转】Pandas学习笔记(五)合并 concat
Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...
- Caused by: java.lang.ClassNotFoundException: Cannot find class:
Caused by: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibat ...