您的位置:首页 > 其它

九度:1172<哈夫曼树WPL>

2014-03-10 14:20 423 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: