文章
14
粉丝
230
获赞
26
访问
71.2k
总体思路:
对于给出的一系列结点,先将权值更小的两个结点合并,并将新结点加入原系列,直到原系列只剩下一个结点
实现方法:
利用优先队列(升序),取队首和次对首合并,加入队列,直到队列只有一个元素。
带注释代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int num;
cin>>num;
priority_queue<int,vector<int>,greater<int>> q; //升序排列
int a;
int ans=0;
while(num--){
cin>>a;
q.push(a);
}
while(q.size()>1){
int t1= q.top(); //队首
q.pop();
int t2= q.top(); //次队首
q.pop();
int t3=t1+t2; //相加的和重新入队
ans+=t3; //体力耗费值累加
q.push(t3);
}
cout<<ans<<endl;
return 0;
}
登录后发布评论
暂无评论,来抢沙发