当前位置: 首页 > article >正文

猫猫cpu的缓存

原题过长,放一下题目大意

题目大意

给你 m m m 1 1 1 n n n 之间的整数,你要找到若干个大小为固定的 k k k 的闭区间,使得所有这些数都在你找到的某个区间内。你需要最小化这些区间的并集的大小,并输出此大小。本题里区间/区间并集的大小,被定义为,这个区间/区间并集里整数的个数

样例

样例输入1

10 3
5
4
5
8
7
6

样例输出1

5

样例解释:

{ 4 , 5 , 6 , 7 , 8 } \{4,5,6,7,8\} {4,5,6,7,8}
共需要 5 个字节

样例输入2

15 4
6
6
14
11
3
8
5

样例输出2

10

数据范围

100 %    n ≤ 1 0 9 , m ≤ 3 ∗ 1 0 5 100\%~~n \leq 10^9,m\leq 3*10^5 100%  n109,m3105

闲话

这题不知从哪里得来的,只知道至少有强蓝弱紫甚至中紫的难度。
在得到后,我立刻做出了正确的分析,却因为一种特殊的情况而未能想出正确的状态转移方程,最终没有做出
至于部分分,在原题数据范围中有,但我没有给出,我会在下面的题解部分给出详细介绍

题解

这是一道典型的思路难题,代码20行以内,所以就不贴代码了。

15pts n ≤ 20 , m ≤ 10 n\leq 20,m\leq 10 n20,m10

这个好拿,但我没去拿,暴力枚举即可
验证部分,可以发现,由于这些长度为 k k k的区间可以重叠,重叠的部分对答案没有影响,所以,对于任何一个长度大于 k k k的连续段都是可以拼出的

70pts n ≤ 1 0 9 , m ≤ 5000 n\leq 10^9,m\leq 5000 n109,m5000

其实中间还有30pts与50pts,但不如70pts好拿。
观察可以发现, n n n已然几乎没用,所以只考虑 m m m,可以发现数据允许 O ( m 2 ) O(m^2) O(m2)通过
考虑 d p dp dp,发现存在以下两种情况
在这里插入图片描述

对于第一种情况,较好考虑,状态转移方程为
d p [ i ] = m i n i ≥ j { d p [ j − 1 ] + ( a [ j ] − a [ i ] ) + 1 } dp[i]=min_{i\geq j}\{dp[j-1]+(a[j]-a[i])+1\} dp[i]=minij{dp[j1]+(a[j]a[i])+1}
对于第二种情况,我们固然希望该区间段长度最短,为 k k k,且覆盖点最多,就是距离 i i i最远 j j j的满足 a [ i ] − a [ j ] + 1 < k a[i]-a[j]+1<k a[i]a[j]+1<k i ≥ j i\geq j ij

于是就可以暴力枚举

100pts

这就简单了,因为 a i a_i ai递增,并且不存在距离最大值,尺取即可。


http://www.kler.cn/news/330439.html

相关文章:

  • 使用 Node.js 创建一个 WebSocket 服务器
  • 如何使用工具删除 iPhone 上的图片背景
  • 文心一言 VS 讯飞星火 VS chatgpt (359)-- 算法导论24.3 1题
  • 本地运行LLama 3.2的三种方法
  • 多旋翼无人机“仿鸟类”精确拦截飞行目标,助力低空安全
  • 微信小程序技术框架选型
  • 在java后端发送HTTPClient请求
  • 用CSS创造三角形案例
  • 数据结构:c++ (OJ202) 快乐数
  • 实用SQL小总结
  • 基于ESP8266—AT指令连接阿里云+MQTT透传数据(2)
  • 828华为云征文|WordPress部署
  • ①EtherCAT转Modbus485RTU网关多路同步高速采集无需编程串口服务器
  • 高德地图key
  • 如果您忘记了 Apple ID 和密码,按照指南可重新进入您的设备
  • 深入解析 Vert.x 的关键特性、架构及其在异步编程中的应用
  • 基于深度学习的不遗忘训练
  • Python Web 开发中的DevOps 实践与自动化运维
  • C++软件试用期检测
  • SpringBoot驱动的社区医院信息管理平台