贪心:合并果子

简介: 分析:这道题不是前缀和,记好!!!用到了优先队列,默认是从大到小,改一下就变成了从小到大

76765a68e323025b84c08f5dec1e91a.png


分析:这道题不是前缀和,记好!!!用到了优先队列,默认是从大到小,改一下就变成了从小到大

源码:

include <bits/stdc++.h>//优先队列

using namespace std;

typedef long long ll;

priority_queue<ll,vector,greater >qu;

ll arr[100005];

int main(void)

{

int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>arr[i];
    qu.push(arr[i]);
}
long long sum=0;
while(qu.size()>1)
{
int lx=qu.top();
    qu.pop();
int ly=qu.top();
    qu.pop();
    sum=sum+lx+ly;
    qu.push(lx+ly);
}
cout<<sum<<endl;
return 0;

}

目录
相关文章
|
算法
【Leetcode-70.爬楼梯 -88.合并两个有序数组】
【Leetcode-70.爬楼梯 -88.合并两个有序数组】
45 0
|
8月前
|
算法
DAY-7 | 牛客-BM21 寻找旋转数组的最小元素:二分法分治思想真的很可靠
这是一个关于编程题目的摘要:题目是牛客网上的&quot;BM21 旋转数组的最小数字&quot;,要求找到旋转数组中的最小数字。题解介绍了使用二分查找算法来解决此问题,因为其时间复杂度优于暴力搜索的线性时间复杂度。二分查找的核心是通过比较中间元素与右端元素的大小,不断缩小搜索范围,最终找到最小值。代码示例展示了如何实现这个算法。总结中强调了二分查找适用于部分有序数组,并指出了解决这类问题的关键在于理解数组的二段单调性。
50 1
|
7月前
|
算法 C++
【洛谷 P1090】[NOIP2004 提高组] 合并果子(贪心算法+哈夫曼编码+优先队列)
该编程题目要求设计算法,将不同种类的果子合并成一堆,使得消耗的体力最小。给定果子种类数`n`(1至10000)和每种果子的数量,需输出合并的最小体力值。使用优先队列(最小堆),每次取出两个数量最少的果子堆合并,并更新总体力消耗。样例输入为3种果子(1, 2, 9),输出最小体力耗费为15。提供的AC代码采用C++实现,通过优先队列优化合并顺序。
94 0
|
7月前
|
存储 算法
leetcode题解:88.合并有序数组
leetcode题解:88.合并有序数组
30 0
|
8月前
|
JavaScript
线性dp之石子合并
线性dp之石子合并
|
8月前
|
人工智能 BI
区间问题之区间覆盖(看一遍就会系列)
区间问题之区间覆盖(看一遍就会系列)
|
算法
基础算法(贪心 合并 位运算)
基础算法(贪心 合并 位运算)
65 0
|
人工智能 算法 C++
洛谷 P1090 合并果子(贪心)
洛谷 P1090 合并果子(贪心)
150 0
|
8月前
|
算法 搜索推荐 Java
算法编程(四):合并两个有序数组
算法编程(四):合并两个有序数组
80 0

热门文章

最新文章

下一篇
开通oss服务