哈夫曼树详解

哈夫曼树

例题

有n堆果子,每堆果子的质量已知,现在需要把这些果子合并成一堆,但是每次只能把两堆果子合并到一起,同时会消耗与两堆果子质量之和等值的体力。显然,在进行n-1次合并之后,就只剩下一堆了。为了尽可能节省体力,请设计出合并的次序方案,使得耗费的体力最少,并给出消耗的体力值。

例如有3堆果子,质量依次为1、2、9。那么可以先将质量为1和2的果堆合并,新堆质量为3,因此耗费体力为3。接着,将新堆与原先的质量为9的果堆合并,又得到新的堆,质量为12,因此耗费体力为12。所以耗费体力之和为3+12=15.可以证明15为最小的体力耗费值。

#include<cstdio>
#include<queue>
using namespace std;
priority_queue<long long,vector<long long>,greater<long long> > q;
int main(){
	int n;
	long long temp,x,y,ans=0;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%lld",&temp);
		q.push(temp);
	}
	while(q.size()>1){
		x=q.top();
		q.pop();
		y=q.top();
		q.pop();
		q.push(x+y);
		ans+=x+y;
	}
	printf("%lld\n",ans);
	return 0;
}

相关推荐

  1. 详解

    2024-06-10 07:36:03       6 阅读
  2. de

    2024-06-10 07:36:03       20 阅读
  3. 学习

    2024-06-10 07:36:03       12 阅读
  4. 根据编码

    2024-06-10 07:36:03       15 阅读
  5. 题记(31)--

    2024-06-10 07:36:03       31 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-10 07:36:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-10 07:36:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-10 07:36:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-10 07:36:03       18 阅读

热门阅读

  1. UML的用例图

    2024-06-10 07:36:03       8 阅读
  2. SASS控制指令与循环

    2024-06-10 07:36:03       6 阅读
  3. sass详解

    2024-06-10 07:36:03       14 阅读
  4. 设备安装施工的一点总结

    2024-06-10 07:36:03       6 阅读
  5. conda常见命令

    2024-06-10 07:36:03       7 阅读
  6. Elasticsearch 详细介绍和经典应用

    2024-06-10 07:36:03       8 阅读
  7. 【数据结构】队列的应用(详解)

    2024-06-10 07:36:03       9 阅读
  8. 使用Spring Boot实现Redis多数据库缓存

    2024-06-10 07:36:03       11 阅读
  9. 小米测开面经

    2024-06-10 07:36:03       9 阅读