【洛谷 P8709】[蓝桥杯 2020 省 A1] 超级胶水 题解(贪心算法+优先队列+哈夫曼树)

[蓝桥杯 2020 省 A1] 超级胶水

题目描述

小明有 n n n 颗石子,按顺序摆成一排,他准备用胶水将这些石子粘在一起。

每颗石子有自己的重量,如果将两颗石子粘在一起,将合并成一颗新的石子,重量是这两颗石子的重量之和。

为了保证石子粘贴牢固,粘贴两颗石子所需要的胶水与两颗石子的重量乘积成正比,本题不考虑物理单位,认为所需要的胶水在数值上等于两颗石子重量的乘积。

每次合并,小明只能合并位置相邻的两颗石子,并将合并出的新石子放在原来的位置。

现在,小明想用最少的胶水将所有石子粘在一起,请帮助小明计算最少需要多少胶水。

输入格式

输入的第一行包含一个整数 n n n,表示初始时的石子数量。

第二行包含 n n n 个整数 w 1 , w 2 , ⋯ , w n w_1, w_2, \cdots, w_n w1,w2,,wn 依次表示每颗石子的重量。

输出格式

输出一行包含一个整数,表示最少需要的胶水数。

样例 #1

样例输入 #1

3
3 4 5

样例输出 #1

47

样例 #2

样例输入 #2

8
1 5 2 6 3 7 4 8

样例输出 #2

546

提示

对于 20 % 20\% 20% 的评测用例, 1 ≤ n ≤ 15 1 \le n \le 15 1n15

对于 60 % 60\% 60% 的评测用例, 1 ≤ n ≤ 100 1\leq n \leq 100 1n100

对于 80 % 80\% 80% 的评测用例, 1 ≤ n ≤ 1000 1\leq n \leq 1000 1n1000

对于所有评测用例, 1 ≤ n ≤ 1 0 5 1\leq n \leq 10^5 1n105 1 ≤ w i ≤ 1000 1 \leq w_i \leq 1000 1wi1000

蓝桥杯 2020 第一轮省赛 A 组 I 题。


思路

首先,将所有的石子重量读入,存入一个最小堆(优先队列)中。优先队列的特性是每次取出的都是队列中最小的元素。

然后,利用贪心算法,每次都选择最小的两颗石子进行粘合,这样可以保证所需的胶水最少。每次从优先队列中取出两个最小的石子,将这两颗石子粘在一起,形成一颗新的石子,新石子的重量是这两颗石子的重量之和,所需的胶水是这两颗石子的重量的乘积。将新石子的重量再次放入优先队列中,同时将所需胶水累加到总胶水量中。

重复以上步骤,直到优先队列中只剩下一颗石子,这时候所有的石子都已经粘在一起,总胶水量即为所求。


AC代码

#include <algorithm>
#include <iostream>
#include <queue>
#include <vector>
#define mp make_pair
#define AUTHOR "HEX9CF"
using namespace std;
using ll = long long;const int N = 1e6 + 7;
const int INF = 0x3f3f3f3f;
const ll MOD = 1e9 + 7;int n;
priority_queue<ll, vector<ll>, greater<ll>> hmin;int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n;while (n--) {int t;cin >> t;hmin.push(t);}ll ans = 0;while (hmin.size() > 1) {ll a = hmin.top();hmin.pop();ll b = hmin.top();hmin.pop();ll c = a + b;ans += a * b;hmin.push(c);}cout << ans;return 0;
}

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

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

相关文章

Zabbix与Prometheus区别简述

Zabbix与Prometheus区别简述 历史沿革 一、监控工具简介 1、Zabbix https://www.zabbix.com/cn/download Zabbix是传统的监控系统&#xff0c;出现比云原生早&#xff0c;使用的是SQL关系型数据库&#xff1b;开源监控软件&#xff0c;遵守 GPLv2开源协议&#xff0c;起源于…

高架学习笔记之系统分析与设计

目录 一、结构化方法&#xff08;SASD&#xff09; 1.1. 结构化分析方法&#xff08;SA&#xff09; 1.1.1. 数据流图&#xff08;DFD&#xff09; 1.1.2. 实体联系图&#xff08;E-R图&#xff09; 1.1.3. 状态转换图(STD) 1.1.4. 数据字典 1.2. 结构化设计方法&#x…

【wpf应用8】如何让WPF Grid控件根据屏幕尺寸自动调整

简介&#xff1a; 在Windows Presentation Foundation&#xff08;WPF&#xff09;中&#xff0c;Grid控件是一个强大的布局工具&#xff0c;它允许开发者创建复杂且响应迅速的用户界面。在不同的设备和屏幕尺寸上保持良好的布局一致性是一个挑战。本文将介绍如何让Grid控件根据…

Prometheus Grafana 配置仪表板

#grafana# 其实grafana提供了丰富的Prometheus数据源的仪表板&#xff0c;基本上主流的都有&#xff0c;通过下面官方地址可查阅 Dashboards | Grafana Labs 这里举例说明&#xff0c;配置node_exporter仪表板 首先&#xff0c;在上面的网站搜索 node 可以查到蛮多的仪表板…

【现代C++】统一初始化

现代C中的统一初始化&#xff08;Uniform Initialization&#xff09;是C11引入的一项特性&#xff0c;它提供了一种统一的语法来初始化任何类型的对象。统一初始化旨在增强代码的一致性和清晰度&#xff0c;减少传统初始化方式中的歧义。以下是统一初始化的几种用法及相应的示…

【贪心】【回溯】【字符串】2014. 重复 K 次的最长子序列

本文涉及知识点 贪心 回溯 字符串 LeetCode2014. 重复 K 次的最长子序列 给你一个长度为 n 的字符串 s &#xff0c;和一个整数 k 。请你找出字符串 s 中 重复 k 次的 最长子序列 。 子序列 是由其他字符串删除某些&#xff08;或不删除&#xff09;字符派生而来的一个字符串…

小白DB补全计划Day2-LeetCode:SQL基本操作selectJOIN

链接&#xff1a;1683. 无效的推文 - 力扣&#xff08;LeetCode&#xff09;1378. 使用唯一标识码替换员工ID - 力扣&#xff08;LeetCode&#xff09;1068. 产品销售分析 I - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 1683 # Write your MySQL quer…

网络安全笔记-day6,NTFS安全权限

文章目录 NTFS安全权限常用文件系统文件安全权限打开文件安全属性修改文件安全权限1.取消父项继承权限2.添加用户访问权限3.修改用户权限4.验证文件权限5.总结权限 强制继承父项权限文件复制移动权限影响跨分区同分区 总结1.权限累加2.管理员最高权限2.管理员最高权限 NTFS安全…

仿京东项目——京西商城(数据库设计)

文章目录 仿京东——京西商城数据库设计建立E-R图数据库表设计用户表商品表订单表订单详情表评论表购物车表购物车项表 仿京东——京西商城 数据库设计 主要实体有&#xff1a; 用户 用户ID&#xff08;User_ID&#xff09;&#xff1a;唯一标识用户的主键 用户名&#xff0…

同豪BIM模型如何快速修改路面、桥面、梁板颜色

0序 同豪的建模软件&#xff0c;做路桥隧的bim建模&#xff0c;速度很快。缺点就是他们的模型可以认为是没有颜色。只有自带的几种风格、纹理。 部分领导觉得颜色不好看&#xff0c;与背景色对比度不强&#xff0c;甚至甲方也会要求修改模型颜色&#xff0c;使之更醒目&#x…

数据集预处理

1.目标 将数据集图像通过预处理方法调整为统一大小尺寸&#xff0c;以便于后续模型提取特征。 2.常见的图像数据预处理方法 2.1图像尺度变换 1.图像缩放&#xff08;使用OpenCV库&#xff09;&#xff1a; import cv2def resize_image(image, width, height):resized_imag…

FFmpeg-- mp4文件合成1:aac和h264封装(c++实现)

文章目录 流程api核心代码muxer.hmuxer.cppaac 和 h264 封装为视频流,封装为c++的Muxter类 流程 分配视频文件上下文 int Init(const char *url); 创建流,赋值给视频的音频流和视频流 int AddStream(AVCodecContext *codec_ctx); 写视频流的head int SendHeader(); 写视频流的…

数字乡村引领新风尚:科技赋能农村实现全面进步

随着信息技术的迅猛发展&#xff0c;数字乡村正成为引领农村全面进步的新风尚。科技作为推动农村发展的强大引擎&#xff0c;正在深刻改变着传统农业的生产方式、农村的社会结构以及农民的生活方式&#xff0c;为农村经济社会的全面进步注入了新的活力和动力。本文将从数字乡村…

JVM—内存可见性

什么是可见性 可见性&#xff1a;一个线程对共享变量值的修改,能够及时地被其他线程看到共享变量&#xff1a;如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量 Java内存模型(JMM) Java内存模型(Java Memory Model)描述了Java程序中各种…

(delphi11最新学习资料) Object Pascal 学习笔记---第7章第4节(Self 标识符)

7.4 Self 标识符 ​ 我们已经看到类的方法非常类似于过程和函数。真正的区别在于&#xff0c;方法有一个额外的隐式参数。这是对当前对象的引用&#xff0c;即应用方法的对象。在方法中&#xff0c;您可以使用Self标识符引用这个参数&#xff0c;即当前对象&#xff0c;如前面…

【Java前端技术栈】Vue2、Vue Cli、Axio入门

一、基本介绍 1.Vue 是什么? Vue (读音 /vjuː/&#xff0c;类似于 view) 是一个前端框架, 易于构建用户界面 2. Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或项目整合 3. 支持和其它类库结合使用 4. 开发复杂的单页应用非常方便 5.…

动态规划——数字三角形模型

母题&#xff1a;数字三角形 集合&#xff1a;f[i][j]表示所有从起点走到 ( i , j ) (i,j) (i,j)的路径 属性&#xff1a;f[i][j]存的数是集合中所有路径和的最大值 状态计算&#xff1a;对于每一条从起点到 ( i , j ) (i,j) (i,j) 的路径&#xff0c;其要么是从左上方来的…

如何了解AI基础概念

1. **在线课程和教程&#xff1a;** - 寻找在线AI课程或教程&#xff0c;例如Coursera、edX、Udemy等平台上的课程。这些课程通常会从基础概念开始介绍&#xff0c;逐步深入。 2. **书籍阅读&#xff1a;** - 阅读与AI相关的书籍&#xff0c;如《Python深度学习》、《机…

[Rust] 使用vscode实现HelloWorld程序并进行debug

一、简介 本文介绍了如何使用vscode编写rust&#xff0c;实现打印"Hello, world!"的程序。 二、工具安装 0. 环境介绍&#xff1a; Linux &#xff08;或者windowswsl&#xff09; 1. 安装rust编译器rustc和包管理器cargo。 请参考连接&#xff1a;Rust 程序设…

vue集成百度地图,实现关键字搜索并自定义覆盖物,保存成静态图片

vue集成百度地图&#xff0c;实现关键字搜索并自定义覆盖物 index.html引入百度地图js <script type"text/javascript" src"https://api.map.baidu.com/api?v2.0&typewebgl&akxxxxxxwMprS7jIfPt354VdgP"></script>vue页面代码 <…