P5017 [NOIP2018 普及组] 摆渡车

news/2024/9/20 18:45:14/文章来源:https://www.cnblogs.com/rgw2010/p/18336240

思路:

考虑动态规划。

定义 \(dp_i\) 表示若有一班车在第 \(i\) 个时间出发所有人等待的时间,则状态转移方程为:

\[dp_i = dp_j + \operatorname{get}(j+1,i)(j \le i - m) \]

其中 \(\operatorname{get}(l,r)\) 表示等车时间在 \([l,r]\) 范围内的人在 \(r\) 处上车的等待时间,考虑 \(O(1)\) 求出 \(\operatorname{get}(l,r)\)

定义 \(s_i\) 表示等车时间在 \([0,i]\) 的所有人的等车时间之和,\(a_i\) 表示等车时间在 \([0,i]\) 的人的个数,则:

\[\operatorname{get}(l,r) = r \times (a_r - a_{l-1}) - (s_r - s_{l-1}) \]

此时时间复杂度优化到了 \(O(T^2)\),考虑缩小 \(j\) 的范围。

注意到若在某时刻回来,且等待不发车时间 \(>m\) 了,肯定没有中间发一次车优,则 \(j\) 的范围应该在 \([i-2m,i-m]\)

此时时间复杂度为 \(O(TM)\)

完整代码:

#include<bits/stdc++.h>
#define Add(x,y) (x+y>=mod)?(x+y-mod):(x+y)
#define lowbit(x) x&(-x)
#define pi pair<ll,ll>
#define pii pair<ll,pair<ll,ll>>
#define iip pair<pair<ll,ll>,ll>
#define ppii pair<pair<ll,ll>,pair<ll,ll>>
#define fi first
#define se second
#define full(l,r,x) for(auto it=l;it!=r;it++) (*it)=x
#define Full(a) memset(a,0,sizeof(a))
#define open(s1,s2) freopen(s1,"r",stdin),freopen(s2,"w",stdout);
using namespace std;
typedef double db;
typedef unsigned long long ull;
typedef long long ll;
bool Begin;
const ll N=4e6+10; 
inline ll read(){ll x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();}return x*f;
}
inline void write(ll x){if(x<0){putchar('-');x=-x;}if(x>9)write(x/10);putchar(x%10+'0');
}
ll n,m,x,k,ans=1e18;
ll a[N],s[N],dp[N];
ll get(ll l,ll r){if(l>r)return 0;if(!l)return r*a[r]-s[r];return r*(a[r]-a[l-1])-(s[r]-s[l-1]); 
}
bool End;
int main(){memset(dp,0x7f,sizeof(dp));n=read(),m=read();while(n--){x=read();a[x]++;k=max(k,x);}for(ll i=1;i<N;i++){s[i]=s[i-1]+a[i]*i;a[i]+=a[i-1];}for(int i=0;i<m;i++)dp[i]=get(0,i);for(int i=m;i<=k+m;i++)for(int j=max(0ll,i-2ll*m);j<=i-m;j++)dp[i]=min(dp[i],dp[j]+get(j+1,i));for(int i=k;i<=k+m;i++)ans=min(ans,dp[i]);write(ans); cerr<<'\n'<<abs(&Begin-&End)/1048576<<"MB";return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/776050.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET 结果与错误处理利器 FluentResults

前言 在项目开发中,方法返回的结果(成功或失败)对我们开发来说很重要。传统方法,如通过异常来指示错误或使用特定的返回类型(如布尔值加输出参数),虽然有效,但可能缺乏直观性和灵活性。 FluentResults库应运而生,它以一种既流畅又富有表达力的方式,极大地优化了这一过…

c# chart缩放,局部放大问题

左键划选放大区域,右键恢复/// <summary>/// 初始化,传入要进行初始化的chart/// </summary>/// <param name="chart1"></param>public static void InitChart (System.Windows.Forms.DataVisualization.Charting.Chart chart1){//开启缩放…

Charles证书一年过去后怎么处理?

1、删除证书 windows--》设置--》搜索(管理证书)--》右键删除2、重置证书3、重新安装证书 安装完后重启charles

阿里云CentOS7.x ECS云盘在线扩容操作

说明这里只介绍如何在线扩容 操作系统:CentOS 7.x 以下操作实现给200G云盘扩容至300G;操作步骤 创建快照 找到需要扩容的云盘,创建快照,避免扩容出问题数据丢失,阿里云快照是收付费的,快照时长设置1天即可;操作比较简。磁盘创建快照创建快照配置截图(保留时间设置1天)…

【BUUCTF】AreUSerialz

【BUUCTF】AreUSerialz (反序列化) 题目来源 收录于:BUUCTF  网鼎杯 2020 青龙组 题目描述 根据PHP代码进行反序列化 <?phpinclude("flag.php");highlight_file(__FILE__);class FileHandler {protected $op;protected $filename;protected $content;fu…

什么情况下你能接受 996

要是有更高的工资或者更好的学习机会,你会自愿接受“996”吗?文中还有粉丝投稿面经的详解,赶快来看看吧。在当下的职场环境中,996 工作制一直是一个备受争议的话题。“996”是一种工作制度的代称,指的是工作日早上 9 点上班,晚上 9 点下班,中午和傍晚休息 1 小时(或不到…

el-progress 自定义线状进度条右边的文字

需要展示类似下面的效果 搜了很多slot的方式试了都不行,好像是因为我后面的文字太长了导致了换行,加上这边需要加其他的样式,最后干脆将原始的文字变成空的,自己写右边的文字加样式了<divstyle="margin: 10px 0 20px 0"v-for="item in deptdata":ke…

SemanticKernel/C#:检索增强生成(RAG)简易实践

本文介绍了基于SemanticKernel/C#的检索增强生成(RAG)简易实践。检索增强生成(RAG)是什么? RAG是“Reference-based Generative model with Attention”的缩写,也可以被称为“Retrieval-Augmented Generation”,是一种结合了检索技术和生成模型的方法,主要用于自然语言处理…

docker-compose搭建elk

一、准备检查自己的docker 和 docker-compose是否安装完毕,切换docker的镜像源二、安装本次安装的主要组件 包括es 、filebeat、kibana、logstash2.1 先配置组件的挂载点 2.2 配置各组件的相关配置文件es-->config---&g…

save-all-resources | 将指定页面的所有资源存到本地 | chrome插件推荐

save-all-resources https://chromewebstore.google.com/detail/save-all-resources/abpdnfjocnmdomablahdcfnoggeeiedb使用方法: F12 右边选择 ResourceSaver点击右边的 Save All Resources 按钮即可--------------------------------------------- 生活的意义就是你自己知道…

低代码如何借助 K8s 实现高并发支持?

引言 在当今这个数字化时代,互联网的普及和技术的飞速发展使得应用程序面临着前所未有的挑战,其中最为显著的就是高并发访问的需求。随着用户数量的激增和业务规模的扩大,如何确保应用在高并发场景下依然能够稳定运行、快速响应,成为了所有开发者和技术团队必须面对的重要课…

02.计算器存储器的原理

02.计算器存储器的原理 目录介绍01.什么是存储器1.1 了解存储器是什么 1.2 存储器类型02.存储器系统设计2.1 存储器分层设计 2.2 存储器层次结构 2.3 高速缓存设计思想 2.4 虚拟内存访问内存03.存储器类型3.1 按照材质划分 3.2 按芯片类型划分 3.3 内存 vs CPU 3.4 存储器访问权…