POJ 3253 Fence Repair【哈夫曼树】

痛定思痛。 2022-10-16 10:29 104阅读 0赞

哈夫曼树

https://liyunhao.blog.csdn.net/article/details/117094052

注意结果要用long long 因为Li可能被加和多次 N*max(Li)不不是求和的最大值

  1. #include <iostream>
  2. #include <queue>
  3. #include <vector>
  4. #include <algorithm>
  5. using namespace std;
  6. #define debug(x) cout<<#x<<": "<<(x)<<endl;
  7. #pragma warning(disable:4996)
  8. int main()
  9. {
  10. //freopen("../in2.txt","r",stdin);
  11. priority_queue< int, vector<int>, greater<int> > q;
  12. int N;
  13. cin >> N;
  14. for (int i = 0; i < N; ++i) {
  15. int t;
  16. cin >> t;
  17. q.push(t);
  18. }
  19. long long int ret = 0;
  20. while (q.size() > 1) {
  21. int a = q.top();
  22. q.pop();
  23. int b = q.top();
  24. q.pop();
  25. q.push(a + b);
  26. ret += a + b;
  27. }
  28. cout << ret << endl;
  29. return 0;
  30. }

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,104人围观)

还没有评论,来说两句吧...

相关阅读

    相关 编码

    哈夫曼树 给定n个权值作为n的叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径