您的位置:首页 > 其它

poj 3253 类似霍夫曼贪心思想,优先队列的运用

2013-08-19 18:45 309 查看
每次选取堆里面最短的两根木头相加,再将所得和重新加入堆中,直到堆的size小于2




View Code

#include<queue>
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
struct mycmp{
bool operator()(const int &a,const int &b)
{
return a>b;
}
};
int main()
{
priority_queue<__int64,vector<__int64>,mycmp> Q;
int n,num;
int i,j;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%d",&num);
Q.push(num);
}
__int64 a,b,sum=0;
while(Q.size()>=2)
{
a=Q.top();
Q.pop();
b=Q.top();
Q.pop();
Q.push(a+b);
sum+=(a+b);
}
printf("%I64d\n",sum);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: