蓝桥杯 第 2 场算法双周赛 第3题 摆玩具【算法赛】 c++ 贪心

news2024/9/25 17:18:16

 题目

摆玩具【算法赛】icon-default.png?t=N7T8https://www.lanqiao.cn/problems/5888/learning/?contest_id=145

问题描述

小蓝是一个热爱收集玩具的小伙子,他拥有 n 个不同的玩具。

这天,他把 n 个玩具按照高度顺序从矮到高摆放在了窗台上,然后,他希望将这些玩具分成 k 个段,使得所有分段的极差之和尽可能小。

具体来说,你需要将一个长度为 n 的序列分为 k 段,我们定义 Gi​ 为第 i 个分段的极差,你要最小化 ∑i=1k​Gi​。

你能帮助小蓝找到最小值是多少吗?

极差:是指每个分段中最高和最矮玩具高度之差,例如有一段为:{3,6,10,12}{3,6,10,12},那么极差为 12−3=912−3=9。

分段:即每一段在原始序列中是一段连续区间,例如将 {1,2,3,4,5}{1,2,3,4,5} 分为两段,{1,2,3}∣{4,5}{1,2,3}∣{4,5} 是合法的,但是 {1,2,4}∣{3,5}{1,2,4}∣{3,5} 不是合法的。

输入格式

第一行输入两个整数 n,k,代表玩具数量和需要分段的数量。

第二行输入 n 个整数 {h1​,h2​,...,hn​},代表每个玩具的高度。

输出格式

输出一个整数,表示最小的极差和。

样例输入

5 2
2 5 7 10 13

样例输出

8

说明

存在多种分段方式,其结果都是最小值:

  1. {2}∣{5,7,10,13}{2}∣{5,7,10,13},极差和为 0+8=80+8=8。
  2. {2,5,7}∣{10,13}{2,5,7}∣{10,13},极差和为 5+3=85+3=8。
  3. {2,5,7,10}∣{13}{2,5,7,10}∣{13},极差和为 8+0=88+0=8。

不存在其他方案使得答案小于 88。

评测数据范围

1≤k≤n≤105 。

1≤h1​≤h2​≤h3​≤...≤hn​≤109 。

运行限制

语言最大运行时间最大运行内存
C++1s128M
C1s128M
Java2s128M
Python33s128M
PyPy33s128M

思路和解题方法

  1. #include <iostream>#include <algorithm>:这两行代码包含了所需的头文件,分别用于输入输出操作和排序操作。

  2. int n;int k, a[100005],b[100005];:这部分代码定义了三个整型变量nk和两个整型数组ab。其中,n表示序列中元素的数量,k表示要删除的元素的数量,a保存原始序列中的元素,b保存相邻元素之间的差值。

  3. void solve():这部分代码定义了一个函数solve,用于解决问题。

  4. cin >> n >> k;:使用输入流cin读取用户输入的序列长度n和要删除的元素数量k

  5. for (int i = 0; i < n; i++) cin >> a[i];:使用循环结构for,依次读取用户输入的序列中的元素,并将它们存储在数组a中。

  6. for (int i = 1; i < n; i++) b[i-1]=a[i]-a[i-1];:使用循环结构for,计算相邻元素之间的差值,并将它们存储在数组b中。注意,数组b的下标从0开始。

  7. sort(b,b+n-1);:使用sort函数,对数组b中的元素进行排序。由于数组b中只有n-1个元素,所以第二个参数为n-1

  8. int sum=0; for(int i=0;i<n-k;++i) {sum+=b[i];}:使用循环结构for,计算前n-k个最小的差值之和,并将结果存储在变量sum中。

  9. cout << sum;:使用输出流cout将结果输出到控制台。

  10. int main():这部分代码定义了主函数main,是程序的入口点。

  11. solve();:调用函数solve解决问题。

  12. return 0;:返回0表示程序正常结束。

复杂度

        时间复杂度:

                O(n*logn)

时间复杂度分析:

  1. 输入序列的长度为n,需要遍历n个元素,所以输入的时间复杂度为O(n)。
  2. 计算相邻元素之间的差值并存储到数组b中,需要遍历n-1个元素,所以该步骤的时间复杂度为O(n)。
  3. 对数组b进行排序,排序的时间复杂度为O(nlogn)。
  4. 计算前n-k个最小差值的和,需要遍历n-k个元素,所以该步骤的时间复杂度为O(n)。
  5. 输出结果的时间复杂度为O(1)。

代码的总时间复杂度为O(nlogn)。

        空间复杂度:

                O(n)

空间复杂度分析:

  1. 数组a和数组b的长度都为n,所以它们的空间复杂度均为O(n)。
  2. 其他变量占用的空间可以忽略不计。

c++ 代码

#include <iostream>
#include <algorithm>
using namespace std;

int n; // 存储序列的长度
int k, a[100005], b[100005]; // k表示要删除的元素数量,a存储原始序列的元素,b存储相邻元素的差值

void solve() {
    cin >> n >> k; // 输入序列的长度和要删除的元素数量

    for (int i = 0; i < n; i++)
        cin >> a[i]; // 输入序列的元素并存储到数组a中

    // 计算相邻元素之间的差值并存储到数组b中
    for (int i = 1; i < n; i++)
        b[i-1] = a[i] - a[i-1];

    sort(b, b+n-1); // 对数组b进行排序

    int sum = 0;
    for (int i = 0; i < n-k; ++i) {
        sum += b[i]; // 计算前n-k个最小差值的和
    }

    cout << sum; // 输出结果
}

int main() {
    solve(); // 调用solve函数解决问题
    return 0;
}

觉得有用的话可以点点赞,支持一下。

如果愿意的话关注一下。会对你有更多的帮助。

每天都会不定时更新哦  >人<  。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JetBrains ReSharper Ultimate 2023.2.2

JetBrains ReSharper Ultimate 国外知名软件公司JetBrains专为软件开发软件编程人员制作的各类应用工具箱&#xff0c;如&#xff1b;PHP集成开发工具PHPStorm&#xff0c;Java整合开发工具IntelliJ IDEA&#xff0c;Python集成开发工具PyCharm&#xff0c;HTML/CSS/JS开发工具…

conda虚拟环境笔记收录

1、安装conda 增加执行权限&#xff1a; chmod x Anaconda3-2023.03-1-Linux-x86_64.sh 开始执行&#xff1a;./Anaconda3-2023.03-1-Linux-x86_64.sh2、查看版本 conda --version3、查看当前虚拟环境 虚拟环境和全局环境有前缀可见 如果不进行设置&#xff0c;重新启动就变成…

hdlbits系列verilog解答(移位寄存器)-23

文章目录 一、问题描述二、verilog源码三、仿真结果 一、问题描述 您将获得一个具有两个输入和一个输出的模块 my_dff &#xff08;实现 D 触发器&#xff09;。实例化其中的三个&#xff0c;然后将它们链接在一起以形成长度为 3 的移位寄存器。端口 clk 需要连接到所有实例。…

uniapp 在 Android Studio 模拟器中运行项目

在开发App时&#xff0c;无论是使用 Flutter 还是 React native&#xff0c;还是使用uni-app 开发跨端App时&#xff0c;总是需要运行调试。一般调试分为两种。 第一&#xff1a;真机调试 第二&#xff1a;模拟器调试 真机调试的好处是可以看到更好的效果&#xff0c;缺点就是…

2023年中国冷风机分类、销量及市场规模分析[图]

冷风机通常是指一种设备&#xff0c;用于通过冷却空气来调节室内或工业环境的温度。这些设备通过循环空气并通过冷却元件&#xff08;如冷却盘或冷凝器&#xff09;来降低空气的温度&#xff0c;从而实现温度控制。冷风机在家庭、商业和工业领域都有广泛的应用&#xff0c;可以…

Linux Mint 21.2 “EDGE” ISO 发布

Linux Mint 团队近日宣布发布最新 Linux Mint 21.2 “Victoria “版本的 “EDGE “ISO 版本&#xff0c;并提供下载。 “这个镜像是为那些硬件太新而无法启动 Linux Mint 21.x 中包含的 5.15 LTS 内核的用户制作的。 Linux Mint 21.2 “Victoria “于2023年7月中旬发布&#x…

【开源】基于SpringBoot的城市桥梁道路管理系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询城市桥梁4.2 新增城市桥梁4.3 编辑城市桥梁4.4 删除城市桥梁4.5 查询单个城市桥梁 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的城市桥梁道路管理系统&#xff0c;支持…

JAVA实现智能停车场管理系统 开源

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容A. 车主端功能B. 停车工作人员功能C. 系统管理员功能1. 停车位模块2. 车辆模块3. 停车记录模块4. IC卡模块5. IC卡挂失模块 三、界面展示3.1 登录注册3.2 车辆模块3.3 停车位模块3.4 停车数据模块3.5 IC卡档案模块3.6 IC卡挂…

了解RAID5和RAID6的区别,让数据存储更安全

RAID&#xff08;Redundant array of inexpensive disk&#xff09;通过给磁盘阵列增加冗余磁盘提高了磁盘阵列的可靠性。 所谓冗余磁盘&#xff0c;即该磁盘不用于存放实际数据&#xff0c;而用来存放一些冗余信息&#xff0c;而这些冗余信息可用来在必要的时候进行有效数据恢…

在docker中创建EMQX 加数据卷

1、从虚拟容器中复制出来文件 docker run --rm emqx/emqx:5.3.0 sh -c cd /opt/emqx && tar -c etc | tar -C $PWD -x 2、将这三个文件夹分别赋予最高权限&#xff0c;也可以777可以755 chmod -R 777 data chmod -R 777 etc chmod -R 777 log 3、创建容器代码 docke…

【鸿蒙软件开发】ArkTS基础组件之Select(下拉菜单)、Slider(滑动条)

文章目录 前言一、Select下拉菜单1.1 子组件1.2 接口参数 1.3 属性1.4 事件1.5 示例代码 二、Slider2.1 子组件2.2 接口参数&#xff1a;SliderStyle枚举说明 2.3 属性2.4 事件SliderChangeMode枚举说明 2.5 示例代码 总结 前言 Select组件&#xff1a;提供下拉选择菜单&#…

【Java基础】JDK8-17新特性

JDK8-17新特性 文章目录 JDK8-17新特性1. 如何学习新特性2. Java8新特性&#xff1a;Lambda表达式3. Java8新特性&#xff1a;函数式(Functional)接口3.1 什么是函数式接口3.2 如何理解函数式接口3.3 举例3.4 Java 内置函数式接口3.4.1 之前的函数式接口3.4.2 四大核心函数式接…

Vue3.3指北(三)

Vue3.3指北 1、Vue2和Vue31.1、 Vue2 选项式 API vs Vue3 组合式API1.2、Vue3的优势 2、组合式API - setup2.1、setup选项2.2、setup中写代码的特点2.3、<script setup>语法糖2.4、props和context 3、组合式API - reactive和ref函数3.1、reactive3.2、ref3.3、reactive 对…

2023年中国背光显示面板分类、市场规模及企业分析[图]

背光显示面板行业&#xff0c;指生产背光显示面板及其相关配件的制造商和供应商&#xff0c;这些制造商和供应商主要为电视机、电脑显示器、智能手机等电子产品提供背光显示面板及配件。背光显示面板是一种电子器件&#xff0c;其功能主要是将电信号转化为视觉图像&#xff0c;…

2023年中国调音台产业链、产量及市场规模分析[图]

调音台是一种专业音频设备&#xff0c;用于混音、处理和控制音频信号。它通常用于音乐制作、现场演出、录音室以及广播等场景中。调音台允许用户调整不同声音来源的音频信号&#xff0c;使其在混音过程中达到理想的音质和平衡。调音台按信号出来方式可分为&#xff1a;模拟式调…

业务设计——注册用户如何防止缓存穿透

什么是缓存穿透 缓存穿透是指在使用缓存系统时&#xff0c;恶意或频繁地请求一个不存在于缓存中的数据&#xff0c;导致每次请求都需要查询数据库或其他数据存储系统&#xff0c;从而绕过了缓存的效果&#xff0c;严重影响系统性能。 这种情况通常发生在恶意攻击、大量请求缓存…

高可用集群 keepalived

一、高可用集群&#xff1a; 1、简介&#xff1a; 高可用集群&#xff08;High Availability Cluster&#xff0c;简称 HA Cluster&#xff09;&#xff0c;是一组相互连接的计算机或服务器&#xff0c;它通过保护用户的业务程序对外不间断提供的服务&#xff0c;把因软件、硬…

PHP如何批量修改二维数组中值

每个name值加pex&#xff0c;age加5&#xff0c; 原数据&#xff1a; $data[["name">a,age>12],["name">b,age>22],["name">c,age>33],["name">d,age>44], ];实现效果 方案一、foreach引用方式 $data[["…

7 款好用的 PDF 密码删除工具

这是最佳 PDF 密码删除工具列表。该列表包括免费和付费软件。将要在线完成的所有事情都需要密码才能感到安全。数据传输也是如此。大多数数据是通过文件传输的&#xff0c;PDF有自己的标志。PDF是一种灵活的文件格式&#xff0c;因此也可以专业使用。 有多种PDF 编辑器软件&am…

echart 设置 legend.type=“scroll“ 翻页时,中文上面被截取,显示不完整,解决办法

问题如图&#xff1a; 修复后的样子&#xff1a; 设置 legend 的 padding height 和 grid 都没有效果&#xff0c;最终找到办法&#xff1a; legend: {itemHeight: 10, // 截取原因是这里设置的太小textStyle: {fontSize: 20,// 行高设置会改变文本区域的高度&#xff0c;不…