http://ac.jobdu.com/problem.php?pid=1172
// 九度:1172
// 求哈夫曼树的wpl
// 没有构建哈夫曼树
#include <stdio.h>
#include <queue>
using namespace std;
priority_queue<int, vector<int>, greater<int> > Q;//小顶堆
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("E:\\in.txt", "r", stdin);
// freopen("E:\\out.txt", "w", stdout);
#endif
int n;
while(scanf("%d", &n) != EOF)
{
while(Q.empty() == false)
{
Q.pop();
}
while(n-->0)
{
int t;
scanf("%d", &t);
Q.push(t);
}
int WPL=0;
while(Q.size() > 1)
{
int a=Q.top();
Q.pop();
int b=Q.top();
Q.pop();
WPL = WPL + a + b;
Q.push(a+b);
}
printf("%d\n", WPL);
}//while
return 0;
}
// ---- 不用小顶堆,每次自己排序,效率差了不少
#include <stdio.h>
#include <algorithm>
using namespace std;
int a[1000];
int main()
{
int n;
while(scanf("%d", &n) != EOF)
{
int i;
for(i=0; i<n;i ++)
{
scanf("%d", &a[i]);
}
int WPL=0;
for(i=1; i<n; i++)
{
sort(a+i-1, a+n);
WPL = WPL + a[i] + a[i-1];
a[i] += a[i-1];
}
printf("%d\n", WPL);
}
return 0;
}