研0 冲刺算法竞赛 day27 P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G

P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

考点:哈夫曼树

思路:建优先队列,自动排序,然后每次取出最小两个即可。本来思路是数组的,但是一直写不对,可能是情况想少了

代码:

复制代码
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;

priority_queue<int, vector<int>, greater<int>> q;//优先队列

int n, x, ans;

int main()
{
	cin >> n;
	for (int i = 0; i < n; ++i)
	{
		cin >> x;
		q.push(x);//插入x
	}
	while (q.size() >= 2) {//只剩一个结束
		int a = q.top(); q.pop();
		int b = q.top(); q.pop();//弹出最小的两个
		ans += a + b;
		q.push(a + b);
	}
	cout << ans << endl;
	return 0;
}

总结:优先队列,作为最小堆使用

相关推荐
ygklwyf12 小时前
零基础薄纱树套树——高级数据结构的结合
算法·线段树·树状数组·树套树
Cinema KI12 小时前
C++11(中):可变参数模板将成为重中之重
开发语言·c++
凯子坚持 c12 小时前
C++基于微服务脚手架的视频点播系统---客户端(2)
开发语言·c++·微服务
柯一梦13 小时前
STL2--vector的介绍以及使用
开发语言·c++
txinyu的博客13 小时前
解析muduo源码之 EPollPoller.h & EPollPoller.cc
c++
Hello World . .13 小时前
排序算法:常用排序算法
c语言·数据结构·算法·vim·排序算法
凯子坚持 c13 小时前
C++基于微服务脚手架的视频点播系统---客户端(3)
开发语言·c++·微服务
寻寻觅觅☆13 小时前
东华OJ-基础题-86-字符串统计(C++)
开发语言·c++·算法
楼田莉子13 小时前
Linux学习:进程信号
linux·运维·服务器·c++·学习
D.不吃西红柿13 小时前
CPM.cmake轻量级包管理器
c++·cmake·cpm.cmake