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

【贪心算法】洛谷P1090 合并果子 / [USACO06NOV] Fence Repair G

2025 - 01 - 21 - 第 45 篇
【洛谷】贪心算法题单 -【 贪心算法】 - 【学习笔记】
作者(Author): 郑龙浩 / 仟濹(CSND账号名)

洛谷 P1090[NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G

【贪心算法】

文章目录

  • 洛谷 P1090[NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 提示
    • 思路
    • 代码

题目描述

在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。

每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过 n − 1 n-1 n1 次合并之后, 就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。

因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。假定每个果子重量都为 1 1 1 ,并且已知果子的种类 数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。

例如有 3 3 3 种果子,数目依次为 1 1 1 2 2 2 9 9 9 。可以先将 1 1 1 2 2 2 堆合并,新堆数目为 3 3 3 ,耗费体力为 3 3 3 。接着,将新堆与原先的第三堆合并,又得到新的堆,数目为 12 12 12 ,耗费体力为 12 12 12 。所以多多总共耗费体力 = 3 + 12 = 15 =3+12=15 =3+12=15 。可以证明 15 15 15 为最小的体力耗费值。

输入格式

共两行。
第一行是一个整数 n ( 1 ≤ n ≤ 10000 ) n(1\leq n\leq 10000) n(1n10000) ,表示果子的种类数。

第二行包含 n n n 个整数,用空格分隔,第 i i i 个整数 a i ( 1 ≤ a i ≤ 20000 ) a_i(1\leq a_i\leq 20000) ai(1ai20000) 是第 i i i 种果子的数目。

输出格式

一个整数,也就是最小的体力耗费值。输入数据保证这个值小于 2 31 2^{31} 231

样例 #1

样例输入 #1

3 
1 2 9

样例输出 #1

15

提示

对于 30 % 30\% 30% 的数据,保证有 n ≤ 1000 n \le 1000 n1000

对于 50 % 50\% 50% 的数据,保证有 n ≤ 5000 n \le 5000 n5000

对于全部的数据,保证有 n ≤ 10000 n \le 10000 n10000

思路

  1. 将每种果子按照升序进行排序。
  2. 然后进行第一次合并(果子重量最小的两个合并),然后再将对方后的水果 和 其余种类的水果进行下一次的排序,然后第二次合并(同样是果子重量最小的两个合并),以此类推,直到合并的次数为 n - 1,即所有的水果合并为一堆的时候,停止循环堆叠。
  3. 计算过程中,将每次合并以后的 水果重量 存放到,第二小的 水果堆 处。

代码

// 洛谷P1090 合并果子
// 思路:
// 1. 将每种果子按照升序进行排序。
// 2. 然后进行第一次合并(果子重量最小的两个合并),然后再将对方后的水果 和 其余种类的水果进行下一次的排序,然后第二次合并(同样是果子重量最小的两个合并),以此类推,直到合并的次数为 n - 1,即所有的水果合并为一堆的时候,停止循环堆叠。
// 3. 计算过程中,将每次合并以后的 水果重量 存放到,第二小的 水果堆 处。
#include <iostream>
#include <algorithm>
using namespace std;
int main( void ){int num; // 果子的种类数long long arr[ 10005 ] = { 0 }; // 每个种类的水果的重量long long sum = 0; // 记录(两个水果堆的总重量)花费的体力// 输入数据cin >> num;for( int i = 1; i < num + 1; i ++ ){cin >> arr[ i ];}// i 控制堆叠次数 + 表示最小的 水果堆的位置// i范围: 1 ~ num - 1     i + 1范围: 2 ~ num for( int i = 1; i < num; i ++ ){sort( arr + i, arr + num + 1 ); //按照 重量的多少 从低到高进行 排序// 每次循环,i 都向后1个,表示已经堆好的水果(arr[ i ]) 和 其他种类的水果arr[ i + 1 ~ num]arr[ i + 1 ] += arr[ i ]; // 最小的两个水果堆进行相加,存放到 第二小的水果堆处sum += arr[ i + 1 ];//测试// cout << arr[ i + 1 ] << "  ";}   cout << sum;return 0;
}

相关文章:

【贪心算法】洛谷P1090 合并果子 / [USACO06NOV] Fence Repair G

2025 - 01 - 21 - 第 45 篇 【洛谷】贪心算法题单 -【 贪心算法】 - 【学习笔记】 作者(Author): 郑龙浩 / 仟濹(CSND账号名) 洛谷 P1090[NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G 【贪心算法】 文章目录 洛谷 P1090[NOIP2004 提高组] 合并果子 / [USACO06…...

14.模型,纹理,着色器

模型、纹理和着色器是计算机图形学中的三个核心概念&#xff0c;用通俗易懂的方式来解释&#xff1a; 1. 模型&#xff1a;3D物体的骨架 通俗解释&#xff1a; 模型就像3D物体的骨架&#xff0c;定义了物体的形状和结构。 比如&#xff0c;一个房子的模型包括墙、屋顶、窗户等…...

【微服务与分布式实践】探索 Dubbo

核心组件 服务注册与发现原理 服务提供者启动时&#xff0c;会将其服务信息&#xff08;如服务名、版本、所在节点的网络地址等&#xff09;注册到注册中心。服务消费者则可以从注册中心发现可用的服务提供者列表&#xff0c;并与之通信。注册中心会存储服务的信息&#xff0c…...

Scale AI 创始人兼 CEO采访

Scale AI 创始人兼 CEO 亚历山大王&#xff08;Alexander Wang&#xff09;首次亮相节目接受采访。他的公司专注于为人工智能工具提供准确标注的数据。早在 2022 年&#xff0c;王成为世界上最年轻的白手起家亿万富翁。 美国在全球人工智能竞赛中的地位&#xff0c;以及它与中…...

Java 大视界 -- Java 大数据在生物信息学中的应用与挑战(67)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

NeuIPS 2024 | CoT推理的新突破:推理边界框架(RBF)

近年来&#xff0c;大型语言模型&#xff08;LLMs&#xff09;在推理任务上的能力不断提升&#xff0c;尤其是 思维链&#xff08;Chain-of-Thought, CoT&#xff09; 技术&#xff0c;使得模型可以逐步推演逻辑&#xff0c;提高预测准确率。然而&#xff0c;当前的CoT推理仍然…...

【C】memory 详解

<memory.h> 是一个 C 标准库头文件&#xff0c;提供了一组内存管理函数&#xff0c;用于分配、释放和操作动态内存。这些函数主要操作的是未初始化的内存块&#xff0c;是早期 C 编程中常用的内存操作工具。 尽管在现代 C 编程中更推荐使用<cstring>或<memory&…...

linux——进程树的概念和示例

一些程序进程运行后&#xff0c;会调用其他进程&#xff0c;这样就组成了一个进程树。 比如,在Windows XP的“运行”对话框中输入“cmd”启动命令行控制台&#xff0c;然后在命令行中输入“notepad”启动记事本&#xff0c;那么命令行控制台进程“cmd.exe”和记事本进程“note…...

分布式系统相关面试题收集

目录 什么是分布式系统&#xff0c;以及它有哪些主要特性&#xff1f; 分布式系统中如何保证数据的一致性&#xff1f; 解释一下CAP理论&#xff0c;并说明在分布式系统中如何权衡CAP三者&#xff1f; 什么是分布式事务&#xff0c;以及它的实现方式有哪些&#xff1f; 什么是…...

CSAPP学习:前言

前言 本书简称CS&#xff1a;APP。 背景知识 一些基础的C语言知识 如何阅读 Do-做系统 在真正的系统上解决具体的问题&#xff0c;或是编写和运行程序。 章节 2025-1-27 个人认为如下章节将会对学习408中的操作系统与计算机组成原理提供帮助&#xff0c;于是先凭借记忆将其简单…...

kaggle比赛入门 - House Prices - Advanced Regression Techniques(第三部分)

本文承接上一篇。 1. 数据预处理流水线&#xff08;pipelines&#xff09; from sklearn.compose import ColumnTransformer from sklearn.pipeline import Pipeline from sklearn.impute import SimpleImputer from sklearn.preprocessing import StandardScaler, OneHotEnc…...

Linux 命令之技巧(Tips for Linux Commands)

Linux 命令之技巧 简介 Linux ‌是一种免费使用和自由传播的类Unix操作系统&#xff0c;其内核由林纳斯本纳第克特托瓦兹&#xff08;Linus Benedict Torvalds&#xff09;于1991年10月5日首次发布。Linux继承了Unix以网络为核心的设计思想&#xff0c;是一个性能稳定的多用户…...

从 GShard 到 DeepSeek-V3:回顾 MoE 大模型负载均衡策略演进

作者&#xff1a;小天狼星不来客 原文&#xff1a;https://zhuanlan.zhihu.com/p/19117825360 故事要从 GShard 说起——当时&#xff0c;人们意识到拥有数十亿甚至数万亿参数的模型可以通过某种形式的“稀疏化&#xff08;sparsified&#xff09;”来在保持高精度的同时加速训…...

【番外篇】鸿蒙扫雷天纪:运混沌灵智勘破雷劫天局

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。 这一节课我们不学习新的知识&#xff0c;我们来做一个扫雷小游戏 目录 扫雷小游戏概述一、扫雷游戏分析…...

【反悔堆】力扣1642. 可以到达的最远建筑

给你一个整数数组 heights &#xff0c;表示建筑物的高度。另有一些砖块 bricks 和梯子 ladders 。 你从建筑物 0 开始旅程&#xff0c;不断向后面的建筑物移动&#xff0c;期间可能会用到砖块或梯子。 当从建筑物 i 移动到建筑物 i1&#xff08;下标 从 0 开始 &#xff09;…...

字符串算法笔记

字符串笔记 说到字符串,首先我们要注意的就是字符串的输入以及输出,因为字符串的输入格式以及要求也分为很多种,我们就来说几个比较常见的格式 g e t s gets gets 我们先来说这个函数的含义...

AWTK 骨骼动画控件用法

创建骨骼动画控件 atlas 指定纹理图集文件&#xff0c;skeleton 指定骨骼动画数据文件。可以是相对路径或绝对路径。atlas 中引用的图片文件需要和 skeleton 文件在同一目录下。 scale_x 和 scale_y 指定缩放比例&#xff0c;根据实际情况调整。 scale_time 指定播放速度&am…...

解决Oracle SQL语句性能问题(10.5)——常用Hint及语法(7)(其他Hint)

10.5.3. 常用hint 10.5.3.7. 其他Hint 1)cardinality:显式的指示优化器为SQL语句的某个行源指定势。该Hint具体语法如下所示。 SQL> select /*+ cardinality([@qb] [table] card ) */ ...; --注: 1)这里,第一个参数(@qb)为可选参数,指定查询语句块名;第二个参数…...

如何写美赛(MCM/ICM)论文中的Summary部分

美赛(MCM/ICM)作为一个数学建模竞赛,要求参赛者在有限的时间内解决一个复杂的实际问题,并通过数学建模、数据分析和计算机模拟等手段给出有效的解决方案。在美赛的论文中,Summary部分(通常也称为摘要)是非常关键的,它是整个论文的缩影,能让评审快速了解你解决问题的思…...

DataWhale组队学习 fun-transformer task5

1. 词向量&#xff1a;单词的“身份证” 首先&#xff0c;我们定义了四个单词的词向量&#xff0c;每个向量维度为3。你可以把这些词向量想象成每个单词的“身份证”。每个身份证上有3个特征&#xff0c;用来描述这个单词的“性格”或“特点”。 word_1 np.array([1, 0, 0])…...

【huawei】云计算的备份和容灾

目录 1 备份和容灾 2 灾备的作用&#xff1f; ① 备份的作用 ② 容灾的作用 3 灾备的衡量指标 ① 数据恢复时间点&#xff08;RPO&#xff0c;Recoyery Point Objective&#xff09; ② 应用恢复时间&#xff08;RTO&#xff0c;Recoyery Time Objective&#xff09; 4…...

电力晶体管(GTR)全控性器件

电力晶体管&#xff08;Giant Transistor&#xff0c;GTR&#xff09;是一种全控性器件&#xff0c;以下是关于它的详细介绍&#xff1a;&#xff08;模电普通晶体管三极管进行对比学习&#xff09; 基本概念 GTR是一种耐高电压、大电流的双极结型晶体管&#xff08;BJT&am…...

LQ1052 Fibonacci斐波那契数列

题目描述 Fibonacci斐波那契数列也称为兔子数列&#xff0c;它的递推公式为&#xff1a;FnFn-1Fn-2&#xff0c;其中F1F21。 当n比较大时&#xff0c;Fn也非常大&#xff0c;现在小蓝想知道&#xff0c;Fn除以10007的余数是多少&#xff0c;请你编程告诉她。 输入 输入包含一…...

Cursor 帮你写一个小程序

Cursor注册地址 首先下载客户端 点击链接下载 1 打开微信开发者工具创建一个小程序项目 选择TS-基础模版 官方 2 然后使用Cursor打开小程序创建的项目 3 在CHAT聊天框输入自己的需求 比如 小程序功能描述&#xff1a;吃什么助手 项目名称&#xff1a; 吃什么小程序 功能目标…...

【机器学习】嘿马机器学习(算法篇)第13篇:决策树算法,学习目标【附代码文档】

本教程的知识点为&#xff1a;机器学习算法定位、 K-近邻算法 1.4 k值的选择 1 K值选择说明 1.6 案例&#xff1a;鸢尾花种类预测--数据集介绍 1 案例&#xff1a;鸢尾花种类预测 1.8 案例&#xff1a;鸢尾花种类预测—流程实现 1 再识K-近邻算法API 1.11 案例2&#xff1a;预测…...

echo ‘export PATH=/usr/local/bin:$PATH‘ >> ~/.bashrc这个和直接添加到/etc/profile有什么区别

echo export PATH/usr/local/bin:$PATH >> ~/.bashrc 和直接添加到 /etc/profile 都是用于修改 PATH 环境变量&#xff0c;但它们适用的范围和效果有所不同&#xff1a; 1. 修改 ~/.bashrc 文件 作用范围&#xff1a;~/.bashrc 是针对当前用户的配置文件&#xff0c;它…...

菜鸟之路Day09一一集合进阶(二)

菜鸟之路Day09一一集合进阶(二) 作者&#xff1a;blue 时间&#xff1a;2025.1.27 文章目录 菜鸟之路Day09一一集合进阶(二)0.概述1.泛型1.1泛型概述1.2泛型类1.3泛型方法1.4泛型接口1.5泛型通配符 2.Set系列集合2.1遍历方式2.2HashSet2.3LinkedHashSet2.4TreeSet 0.概述 内…...

写在新年之际

各位关注我的小伙伴们&#xff0c;大家好&#xff01; 在这新年来临之际&#xff0c;首先祝大家新年快乐&#xff01;愿新的一年充满机遇与收获&#xff0c;愿我们在各自的领域中继续突破和成长&#xff01; 回顾2024年&#xff0c;这是充满变革的一年&#xff0c;不仅世界局…...

【shell工具】编写一个批量扫描IP地址的shell脚本

批量扫描某个网段中的主机&#xff08;并发&#xff09; 创建目录编写脚本文件 mkdir /root/ip_scan_shell/ touch /root/ip_scan_shell/online_server.txt touch /root/ip_scan_shell/offline_server.txt touch /root/ip_scan_shell/ip_scan.sh写入下面shell到脚本文件中…...

分库分表后如何进行join操作

在分库分表后的系统中&#xff0c;进行表之间的 JOIN 操作比在单一数据库表中复杂得多&#xff0c;因为涉及的数据可能位于不同的物理节点或分片中。此时&#xff0c;传统的 SQL JOIN 语句不能直接用于不同分片的数据&#xff0c;以下是几种处理这样的跨分片 JOIN 操作的方法&a…...