#include <map>
#include <set>
#include <list>
#include <queue>
#include <deque>
#include <stack>
#include <string>
#include <time.h>
#include <cstdio>
#include <math.h>
#include <iomanip>
#include <cstdlib>
#include <limits.h>
#include <string.h>
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
#define LL long long
#define MIN INT_MIN
#define MAX INT_MAX
#define PI acos(-1.0)
#define FRE freopen("input.txt","r",stdin)
#define FF freopen("output.txt","w",stdout)
#define N 20005
priority_queue<LL,vector<LL>,greater<LL> > pp;
int main () {
int n;
while (scanf("%d",&n) != -1) {
int i;
while (!pp.empty()) pp.pop();
LL d;
LL ans = 0;
for (i = 0; i < n; i++) {
scanf("%I64d",&d);
pp.push(d);
}
while (pp.size() != 1) {
LL a,b;
a = pp.top();
pp.pop();
b = pp.top();
pp.pop();
ans += (a + b);
pp.push(a + b);
}
if (n == 1) {
printf("%I64d\n",d);
continue;
}
printf("%I64d\n",ans);
}
return 0;
}【哈夫曼树】POJ 3253
最新推荐文章于 2022-09-27 09:16:56 发布
本文介绍了一种使用C++实现的算法,通过优先队列优化,解决求解给定整数序列中任意两个数之和的最大值问题。代码示例包括输入输出流程及关键逻辑解释。
3496

被折叠的 条评论
为什么被折叠?



