OJ3260最大数组和问题

题目:

小明是一名勇敢的冒险家,他在一次探险途中发现了一组神秘的宝石,这些宝石的价值都不同。但是,他发现这些宝石会随着时间的推移逐渐失去价值,因此他必须在规定的次数内对它们进行处理。 小明想要最大化这些宝石的总价值。他有两种处理方式:

1.选出两个最小的宝石,并将它们从宝石组中删除。

2.选出最大的宝石,并将其从宝石组中删除。 现在,给你小明手上的宝石组,请你告诉他在规定的次数内,最大化宝石的总价值是多少。

输入格式 第一行包含一个整数t,表示数据组数。 对于每组数据,第一行包含两个整数n和k,表示宝石的数量和规定的处理次数。

第二行包含n个整数a1,a2,...,an,表示每个宝石的价值。 输出格式 对于每组数据,输出一个整数,表示在规定的次数内,最大化宝石的总价值。

思路:

首先,对原始数组进行排序不会影响结果,因为最小宝石始终在数组的开头,最大宝石则在数组的未尾。也就是排序后,每次操作要么删除左边的两个元素,要么删除右边的一个元素。因此,如果我们删除2m 个最小宝石和(k-m)个最大宝石,则剩余的元素组成的段在排序后的数组中从位置(2m + 1)到位置(n-(k-m)),可以从左到右遍历 ,使用前缀和在 O(1)时间内计算其总和。

样例输入

6
5 1
2 5 1 10 6
5 2
2 5 1 10 6
3 1
1 2 3
6 1
15 22 12 10 13 11
6 2
15 22 12 10 13 11
5 1
999999996 999999999 999999997 999999998 999999995

样例输出

21
11
3
62
46
3999999986

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;int main() {int t;cin >> t; // 读取测试用例的数量while(t--) { // 对每一个测试用例进行处理int n, k;cin >> n >> k; // 读取宝石的数量n和处理次数kvector<ll> a(n), sum(n + 1, 0); // 初始化数组a用于存放宝石价值,sum用于存放前缀和for(int i = 0; i < n; i++) cin >> a[i]; // 读取宝石价值数组sort(a.begin(), a.end()); // 将宝石价值按从小到大排序// 计算前缀和数组for(int i = 1; i <= n; i++) {sum[i] = sum[i - 1] + a[i - 1];}ll ans = 0; // 用于存放最大价值和// 遍历可能的删除组合for(int m = 0; m <= k; m++) {if(2 * m <= n && (k - m) <= n - 2 * m) {ll current_sum = sum[n - (k - m)] - sum[2 * m];ans = max(ans, current_sum);//表示删除这些宝石后的总和。}}cout << ans << "\n"; // 输出结果}return 0;
}

详细过程解释

  1. 输入读取

    • 读取测试用例的数量 t
  2. 处理每个测试用例

    • 读取宝石的数量 n 和处理次数 k
    • 初始化一个大小为 n 的数组 a,用于存储每个宝石的价值。
    • 初始化一个大小为 n + 1 的数组 sum,用于存储前缀和,初始值为 0。
    • 读取宝石价值,存入数组 a
    • 对数组 a 进行排序,以便后续操作方便。
    • 计算前缀和 sumsum[i] 表示数组 a 中前 i 个元素的和。
  3. 遍历可能的删除组合

    • 遍历 m 从 0 到 k,表示删除 2m 个最小宝石和 (k - m) 个最大宝石。
    • 对于每个 m,计算删除后的剩余元素的和:
      • sum[n - (k - m)] 表示删除 k - m 个最大宝石后,剩余元素的和。
      • sum[2 * m] 表示删除 2m 个最小宝石后的和。
      • current_sum = sum[n - (k - m)] - sum[2 * m] 表示删除这些宝石后的总和。
    • 更新 ans 为当前情况下的最大和。
  4. 输出结果

    • 在每个测试用例处理完成后,输出 ans

这样,通过逐步删除最小宝石和最大宝石,并计算剩余元素的和,我们可以找到在规定次数内最大化宝石总价值的方法。

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

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

相关文章

数据结构——二叉树(C语言版)

前言 二叉树是一种非线性的数据结构。二叉搜索树、堆、红黑树等高阶数据结构都是依托于二叉树的基础实现的&#xff0c;所以我们有必要好好研究一下“二叉树”这种数据结构。本文只介绍二叉树的基础及中等用法&#xff0c;笔者能力有限&#xff0c;欠妥当之处欢迎批评指正。 树…

【RS】哨兵系列新网站无法下载的问题及解决办法(Sentinel-2)

最近有些小伙伴留言说哨兵数据无法下载&#xff0c;网站打开后会有一层蒙版&#xff0c;无法选取研究区等信息&#xff0c;今天就跟大家分享一下如何解决这个问题。还知道如何下载的小伙伴可以移步到之前的文章&#xff1a;【RS】欧空局Sentinel-2卫星数据下载(哨兵1、2、3、5P…

海外短剧看剧系统搭建部署,h5/app双端,系统页面一键翻译功能,批量上传素材等功能。

目录 前言&#xff1a; 一、海外短剧系统有是吗功能&#xff1f; 二、海外短剧项目在海外反馈怎么样&#xff1f; 总结&#xff1a; 前言&#xff1a; 海外短剧系统搭建开发&#xff0c;想进军海外短剧市场的&#xff0c;搭建这样一款海外短剧系统是必要的。海外短剧市场规…

ATA-4051C高压功率放大器应用分享:超声波测量液位系统

超声波测量液位是一种非接触式液位测量方法&#xff0c;其原理是利用超声波的传播特性来测量液位。超声波是一种高频机械波&#xff0c;其频率高于人类能够听到的频率&#xff0c;通常在100kHz以上。超声波具有较好的穿透性和反射性&#xff0c;可以在固体、液体和气体中传播&a…

FTP

文章目录 概述主动模式和被动模式的工作过程注意事项 概述 文件传输协议 FTP&#xff08;File Transfer Protocol&#xff09;在 TCP/IP 协议族中属于应用层协议&#xff0c;是文件传输标准。主要功能是向用户提供本地和远程主机之间的文件传输&#xff0c;尤其在进行版本升级…

ThinkBook 14 G6+ IMH(21LD)原厂Win11系统oem镜像下载

lenovo联想笔记本电脑原装出厂Windows11系统安装包&#xff0c; 恢复开箱状态自带预装系统&#xff0c;含恢复重置还原功能 链接&#xff1a;https://pan.baidu.com/s/1WIPNagHrC0wqYC3HIcua9A?pwdhzqg 提取码&#xff1a;hzqg 联想原装出厂系统自带所有驱动、出厂主题壁…

oracle 11g安装补丁

cd /myweb/src mv /myweb/app/oracle/product/11.2.0/dbhome_1/OPatch /myweb/app/oracle/product/11.2.0/dbhome_1/OPatch.old unzip p6880880_112000_Linux-x86-64.zip mv OPatch O R A C L E H O M E e x p o r t P A T H = ORACLE_HOME export PATH=

Zabbix安装:构建高效可靠的Zabbix监控系统

目录 引言 一、zabbix基本介绍 &#xff08;一&#xff09;什么是zabbix &#xff08;二&#xff09;zabbix结构体系 &#xff08;三&#xff09;zabbix监控对象 &#xff08;四&#xff09;zabbix进程 &#xff08;五&#xff09;zabbix监控模式 &#xff08;六&#…

【SQL边干边学系列】01介绍性问题

文章目录 前言介绍性问题1.我们有哪些承运商&#xff1f;2. 从目录表中查询特定字段3.销售代表4.在美国的销售代表5.由特定员工ID下的订单6.供应商和联系人信息 答案1.我们有哪些承运商&#xff1f;2. 从目录表中查询特定字段3.销售代表4.在美国的销售代表5.由特定员工ID下的订…

FFmpeg PCM编码为AAC

使用FFmpeg库把PCM文件编码为AAC文件&#xff0c;FFmpeg版本为4.4.2-0 代码如下&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h> #include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #include <…

Codes 重新定义 SaaS 模式的研发项目管理平台开源版 4.5.5 发布

一&#xff1a;简介 Codes 重新定义 SaaS 模式 云端认证 程序及数据本地安装 不限功能 30 人免费 Codes 是一个 高效、简洁、轻量的一站式研发项目管理平台。包含需求管理&#xff0c;任务管理&#xff0c;测试管理&#xff0c;缺陷管理&#xff0c;自动化测试&#xff0…

海外短剧的未来展望:创新与发展的方向

随着全球化的加速和互联网技术的飞速发展&#xff0c;海外短剧作为一种新兴的娱乐形式&#xff0c;正逐渐赢得广大观众的喜爱。在这个充满变革的时代&#xff0c;海外短剧面临着前所未有的机遇与挑战。本文将探讨海外短剧未来的创新与发展方向。 一、内容创新&#xff1a;打破传…

Oracle操作扩可变字符长度交易影响分析-较小

使用AI帮助学习知识 以下知识来至AI oracle 一张大表&#xff0c;对可变字符串长度从10扩到20位&#xff0c;oracle底层存储是否会发生变化&#xff0c;先锁表&#xff0c;更新表字典信息&#xff0c;然后会不会重新整理表&#xff0c;在有交易的情况下导致大量交易失效&#…

日常开发坑记录

hutool工具类转换,anInt可能为负数(队列散列需求遇到)long l = RandomUtil.randomLong(0, 9999999999L);Integer anInt = Convert.toInt(l);System

wandb上传整个项目代码

wandb.run.log_code上传整个项目代码 wandb一般只能保存训练代码文件 用了这个函数并且指定文件格式&#xff0c;就能保存指定文件当git来用了 import wandbwandb.init(project"latent-diffusion") wandb.run.log_code(".", include_fnlambda path: path.e…

docker --network host,仍然无法使用127.0.0.1连接数据库,改用宿主机ip后可以连接

有两个docker容器&#xff0c;一个是mysql&#xff0c;一个是java服务。两个都是host网络模式。 宿主机上可以连mysql&#xff0c;java服务也可以通过wget检测能连上mysql端口。 外部网络也能连上mysql。只有这个java服务无法连接mysql&#xff0c;java服务是用是127.0.0.1&…

网络ip地址冲突会出现什么情况

在现代数字化社会中&#xff0c;网络IP地址扮演着至关重要的角色&#xff0c;它是设备在网络中唯一识别的标识。然而&#xff0c;当网络中出现IP地址冲突时&#xff0c;一系列问题便会随之而来。那么&#xff0c;网络ip地址冲突会出现什么情况呢&#xff1f;下面一起来跟虎观代…

k8s-部署对象存储minio

环境信息 minio版本 :最新 k8s 版本1.22 使用nfs作为共享存储 一.单节点安装包部署 脚本部署&#xff0c;一键部署&#xff0c;单节点应用于数据量小&#xff0c;一些缓存存储&#xff0c;比如gitlab-runner的产物数据&#xff0c;maven的打包依赖数据 #!/bin/bash# 步骤…

如何进行辐射抗扰度磁场测试?

一、为什么要进行闭环磁场测试&#xff1f; 辐射抗扰度测试中进行闭环磁场测试是为了评估设备在外部磁场影响下的性能表现。外部磁场可能来自各种源头&#xff0c;例如电力线、电动机、变压器等&#xff0c;这些磁场可能干扰设备的正常工作。闭环磁场测试通过模拟设备在实际工…

虾皮Lazada流量“滑铁卢”?自养号测评补单让你轻松翻盘!

当作为虾皮&#xff08;Shopee&#xff09;或Lazada平台的卖家时&#xff0c;密切关注流量数据是至关重要的。如果观察到店铺的流量出现下滑趋势&#xff0c;首要任务便是深入探究流量减少的根本原因。在明确了导致流量下滑的关键因素后&#xff0c;卖家便能更有针对性地采取措…