POJ 3253 Fence Repair【哈夫曼树】
哈夫曼树
同
https://liyunhao.blog.csdn.net/article/details/117094052
注意结果要用long long 因为Li可能被加和多次 N*max(Li)不不是求和的最大值
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
#define debug(x) cout<<#x<<": "<<(x)<<endl;
#pragma warning(disable:4996)
int main()
{
//freopen("../in2.txt","r",stdin);
priority_queue< int, vector<int>, greater<int> > q;
int N;
cin >> N;
for (int i = 0; i < N; ++i) {
int t;
cin >> t;
q.push(t);
}
long long int ret = 0;
while (q.size() > 1) {
int a = q.top();
q.pop();
int b = q.top();
q.pop();
q.push(a + b);
ret += a + b;
}
cout << ret << endl;
return 0;
}
还没有评论,来说两句吧...